wandelbots-api-client 25.11.0.dev12__py3-none-any.whl → 26.1.0.dev50__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. wandelbots_api_client/__init__.py +1 -1
  2. wandelbots_api_client/api/motion_api.py +3 -3
  3. wandelbots_api_client/api_client.py +1 -1
  4. wandelbots_api_client/configuration.py +1 -1
  5. wandelbots_api_client/v2/__init__.py +1 -1
  6. wandelbots_api_client/v2/api/bus_inputs_outputs_api.py +579 -0
  7. wandelbots_api_client/v2/api/jogging_api.py +1 -1
  8. wandelbots_api_client/v2/api/motion_group_models_api.py +530 -2
  9. wandelbots_api_client/v2/api/program_api.py +12 -12
  10. wandelbots_api_client/v2/api/trajectory_execution_api.py +1 -1
  11. wandelbots_api_client/v2/api_client.py +1 -1
  12. wandelbots_api_client/v2/configuration.py +1 -1
  13. wandelbots_api_client/v2/models/__init__.py +2 -0
  14. wandelbots_api_client/v2/models/blending_auto.py +1 -1
  15. wandelbots_api_client/v2/models/blending_position.py +15 -1
  16. wandelbots_api_client/v2/models/blending_space.py +37 -0
  17. wandelbots_api_client/v2/models/motion_group_description.py +4 -2
  18. wandelbots_api_client/v2_pydantic/__init__.py +1 -1
  19. wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py +585 -0
  20. wandelbots_api_client/v2_pydantic/api/jogging_api.py +1 -1
  21. wandelbots_api_client/v2_pydantic/api/motion_group_models_api.py +536 -2
  22. wandelbots_api_client/v2_pydantic/api/program_api.py +12 -12
  23. wandelbots_api_client/v2_pydantic/api/trajectory_execution_api.py +1 -1
  24. wandelbots_api_client/v2_pydantic/api_client.py +1 -1
  25. wandelbots_api_client/v2_pydantic/configuration.py +1 -1
  26. wandelbots_api_client/v2_pydantic/models.py +401 -374
  27. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/METADATA +2 -2
  28. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/RECORD +31 -30
  29. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/WHEEL +0 -0
  30. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/licenses/LICENSE +0 -0
  31. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/top_level.txt +0 -0
@@ -1,13 +1,13 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: public.openapi.yaml
3
- # timestamp: 2025-12-03T19:57:03+00:00
3
+ # timestamp: 2026-01-09T13:39:05+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from datetime import date
8
8
  from enum import Enum
9
9
  from pathlib import Path
10
- from typing import Annotated, Any, Dict, List, Literal, Optional, Union
10
+ from typing import Annotated, Any, Literal
11
11
 
12
12
  from pydantic import AwareDatetime, BaseModel, EmailStr, Field, RootModel
13
13
 
@@ -17,7 +17,7 @@ class NameList(RootModel):
17
17
  A list of names
18
18
  """
19
19
 
20
- root: List[str]
20
+ root: list[str]
21
21
  """
22
22
  A list of names
23
23
  """
@@ -127,7 +127,7 @@ class KukaController(BaseModel):
127
127
  """
128
128
  The RSI server runs inside of the cell.
129
129
  """
130
- slow_cycle_rate: Optional[bool] = False
130
+ slow_cycle_rate: bool | None = False
131
131
  """
132
132
  If true, uses slower cycle time of 12ms instead of 4ms.
133
133
 
@@ -284,15 +284,15 @@ class VirtualController(BaseModel):
284
284
 
285
285
  kind: Literal['VirtualController'] = 'VirtualController'
286
286
  manufacturer: Manufacturer
287
- type: Optional[VirtualControllerTypes] = None
288
- json_: Annotated[Optional[str], Field(alias='json')] = None
287
+ type: VirtualControllerTypes | None = None
288
+ json_: Annotated[str | None, Field(alias='json')] = None
289
289
  """
290
290
  Complete JSON configuration of the virtual robot controller.
291
291
  Can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](getVirtualControllerConfiguration).
292
292
  If provided, the `type` field should not be used.
293
293
 
294
294
  """
295
- initial_joint_position: Optional[str] = None
295
+ initial_joint_position: str | None = None
296
296
  """
297
297
  Initial joint position of the first motion group from the virtual robot controller.
298
298
  Provide the joint position as a JSON array containing 7 float values,
@@ -323,14 +323,12 @@ class RobotController(BaseModel):
323
323
 
324
324
  """
325
325
  configuration: Annotated[
326
- Union[
327
- AbbController,
328
- FanucController,
329
- KukaController,
330
- UniversalrobotsController,
331
- VirtualController,
332
- YaskawaController,
333
- ],
326
+ AbbController
327
+ | FanucController
328
+ | KukaController
329
+ | UniversalrobotsController
330
+ | VirtualController
331
+ | YaskawaController,
334
332
  Field(discriminator='kind'),
335
333
  ]
336
334
 
@@ -360,8 +358,8 @@ class ContainerImage(BaseModel):
360
358
  """
361
359
  The location of a container image in the form of `<registry>/<image>:<tag>`.
362
360
  """
363
- credentials: Optional[ImageCredentials] = None
364
- secrets: Optional[List[Secret]] = None
361
+ credentials: ImageCredentials | None = None
362
+ secrets: list[Secret] | None = None
365
363
  """
366
364
  Known secrets for authentication with the container registry.
367
365
  """
@@ -379,7 +377,7 @@ class ContainerEnvironment(RootModel):
379
377
 
380
378
  """
381
379
 
382
- root: List[ContainerEnvironmentItem]
380
+ root: list[ContainerEnvironmentItem]
383
381
  """
384
382
  A list of environment variables with name and their value.
385
383
  These can be used to configure the containerized application, and turn features on or off.
@@ -446,11 +444,11 @@ class ContainerResources(BaseModel):
446
444
  Additional resources that the application requires.
447
445
  """
448
446
 
449
- intel_gpu: Annotated[Optional[int], Field(ge=0, le=1)] = None
447
+ intel_gpu: Annotated[int | None, Field(ge=0, le=1)] = None
450
448
  """
451
449
  Number of GPUs the application requires.
452
450
  """
453
- memory_limit: Annotated[Optional[str], Field(examples=['1000Mi'])] = None
451
+ memory_limit: Annotated[str | None, Field(examples=['1000Mi'])] = None
454
452
  """
455
453
  The maximum memory allocated to this application.
456
454
  """
@@ -478,14 +476,14 @@ class App(BaseModel):
478
476
  The path of the icon for the App (/$cell/$name/$app_icon).
479
477
  """
480
478
  container_image: ContainerImage
481
- port: Optional[int] = 8080
479
+ port: int | None = 8080
482
480
  """
483
481
  The port the containerized webserver is listening on.
484
482
  """
485
- environment: Optional[ContainerEnvironment] = None
486
- storage: Optional[ContainerStorage] = None
487
- resources: Optional[ContainerResources] = None
488
- health_path: Optional[str] = None
483
+ environment: ContainerEnvironment | None = None
484
+ storage: ContainerStorage | None = None
485
+ resources: ContainerResources | None = None
486
+ health_path: str | None = None
489
487
  """
490
488
  Defines the URL path suffix used to check the application's health status. The complete health check URL
491
489
  is constructed as `/$cell/$name/$health_path`. When the application is working as expected,
@@ -498,7 +496,7 @@ class App(BaseModel):
498
496
  automatically restart the application container to restore service.
499
497
 
500
498
  """
501
- diagnosis_path: Optional[str] = None
499
+ diagnosis_path: str | None = None
502
500
  """
503
501
  Defines the URL path suffix used to provide an endpoint for diagnosis data collection.
504
502
  The complete diagnosis check URL is constructed as `/$cell/$name/$diagnosis_path`.
@@ -518,13 +516,13 @@ class Cell(BaseModel):
518
516
  """
519
517
 
520
518
  name: CellName
521
- description: Optional[CellDescription] = None
522
- controllers: Optional[List[RobotController]] = None
523
- apps: Optional[List[App]] = None
519
+ description: CellDescription | None = None
520
+ controllers: list[RobotController] | None = None
521
+ apps: list[App] | None = None
524
522
 
525
523
 
526
524
  class Error(BaseModel):
527
- code: Optional[str] = None
525
+ code: str | None = None
528
526
  message: str
529
527
 
530
528
 
@@ -570,7 +568,7 @@ class ServiceStatusPhase(Enum):
570
568
  class Status(BaseModel):
571
569
  severity: ServiceStatusSeverity
572
570
  code: ServiceStatusPhase
573
- reason: Optional[str] = None
571
+ reason: str | None = None
574
572
 
575
573
 
576
574
  class ServiceStatus(BaseModel):
@@ -580,7 +578,7 @@ class ServiceStatus(BaseModel):
580
578
 
581
579
 
582
580
  class ServiceStatusList(RootModel):
583
- root: List[ServiceStatus]
581
+ root: list[ServiceStatus]
584
582
 
585
583
  def __getitem__(self, index: int) -> ServiceStatus:
586
584
  """
@@ -644,14 +642,14 @@ class BusIOProfinetIpConfig(BaseModel):
644
642
 
645
643
 
646
644
  class BusIOProfinetNetwork(BaseModel):
647
- device_name: Annotated[Optional[str], Field(examples=['pnDevice'])] = None
645
+ device_name: Annotated[str | None, Field(examples=['pnDevice'])] = None
648
646
  """
649
647
  Name of Station (NoS) of the PROFINET device. The NoS is used in combination with IPv4 record to identify your device in the PROFINET network.
650
648
  The `device_name` will be used as NoS if no REMA XML file is already present on your machine and no `rema_xml_content` is provided.
651
649
 
652
650
  """
653
- ip_config: Optional[BusIOProfinetIpConfig] = None
654
- rema_xml_content: Optional[str] = None
651
+ ip_config: BusIOProfinetIpConfig | None = None
652
+ rema_xml_content: str | None = None
655
653
  """
656
654
  Content of the PROFINET REMA XML file.
657
655
  Is used when PROFINET service is added for the first time to create the REMA XML file that holds data to be kept for the next session.
@@ -690,7 +688,7 @@ class BusIOProfinet(BaseModel):
690
688
  """
691
689
 
692
690
  bus_type: Literal['profinet'] = 'profinet'
693
- network_config: Optional[BusIOProfinetNetwork] = None
691
+ network_config: BusIOProfinetNetwork | None = None
694
692
  """
695
693
  Used to enable IP communication through the same physical ethernet interface while PROFINET driver is active.
696
694
 
@@ -709,7 +707,9 @@ class BusIOProfinet(BaseModel):
709
707
  MAC address of the physical ethernet interface that you want to use for PROFINET communication.
710
708
 
711
709
  """
712
- default_route: Optional[BusIOProfinetDefaultRoute] = None
710
+ default_route: Annotated[
711
+ BusIOProfinetDefaultRoute | None, Field(deprecated=True)
712
+ ] = None
713
713
 
714
714
 
715
715
  class BusIOProfinetVirtual(BaseModel):
@@ -722,7 +722,7 @@ class BusIOProfinetVirtual(BaseModel):
722
722
 
723
723
 
724
724
  class BusIOModbusTCPServer(BaseModel):
725
- network_type: Optional[Literal['tcp']] = None
725
+ network_type: Literal['tcp'] | None = None
726
726
  port: Annotated[int, Field(examples=[502], ge=1, le=65534)]
727
727
  """
728
728
  Port number of the MODBUS server to establish communication with.
@@ -766,7 +766,7 @@ class BusIOModbusServer(BaseModel):
766
766
 
767
767
 
768
768
  class BusIOModbusTCPClient(BaseModel):
769
- network_type: Optional[Literal['tcp']] = None
769
+ network_type: Literal['tcp'] | None = None
770
770
  ip: Annotated[str, Field(examples=['192.168.1.100'])]
771
771
  """
772
772
  IP address of the MODBUS server to establish communication with.
@@ -800,13 +800,11 @@ class BusIOModbusVirtual(BaseModel):
800
800
 
801
801
  class BusIOType(RootModel):
802
802
  root: Annotated[
803
- Union[
804
- BusIOProfinet,
805
- BusIOProfinetVirtual,
806
- BusIOModbusServer,
807
- BusIOModbusClient,
808
- BusIOModbusVirtual,
809
- ],
803
+ BusIOProfinet
804
+ | BusIOProfinetVirtual
805
+ | BusIOModbusServer
806
+ | BusIOModbusClient
807
+ | BusIOModbusVirtual,
810
808
  Field(discriminator='bus_type'),
811
809
  ]
812
810
 
@@ -845,7 +843,7 @@ class Metadata(RootModel):
845
843
  Additional metadata to add to the backup
846
844
  """
847
845
 
848
- root: Dict[str, str]
846
+ root: dict[str, str]
849
847
 
850
848
 
851
849
  class ConfigurationArchive(RootModel):
@@ -883,11 +881,9 @@ class ConfigurationArchiveStatusSuccess(BaseModel):
883
881
 
884
882
  class ConfigurationArchiveStatus(RootModel):
885
883
  root: Annotated[
886
- Union[
887
- ConfigurationArchiveStatusCreating,
888
- ConfigurationArchiveStatusError,
889
- ConfigurationArchiveStatusSuccess,
890
- ],
884
+ ConfigurationArchiveStatusCreating
885
+ | ConfigurationArchiveStatusError
886
+ | ConfigurationArchiveStatusSuccess,
891
887
  Field(discriminator='status'),
892
888
  ]
893
889
  """
@@ -925,7 +921,7 @@ class License(BaseModel):
925
921
  """
926
922
  Identification key of the license.
927
923
  """
928
- license_expiry_date: Optional[date] = None
924
+ license_expiry_date: date | None = None
929
925
  """
930
926
  Expiration date of the license.
931
927
  """
@@ -941,11 +937,11 @@ class License(BaseModel):
941
937
  """
942
938
  Amount of times the license can be activated.
943
939
  """
944
- feature_limitations: Optional[Dict[str, int]] = None
940
+ feature_limitations: dict[str, int] | None = None
945
941
  """
946
942
  Feature limitations of the license.
947
943
  """
948
- feature_flags: Optional[List[str]] = None
944
+ feature_flags: list[str] | None = None
949
945
  """
950
946
  Features enabled by a license.
951
947
  """
@@ -1101,7 +1097,7 @@ class Vector3d(RootModel):
1101
1097
 
1102
1098
  """
1103
1099
 
1104
- root: Annotated[List[float], Field(max_length=3, min_length=3, title='Vector3d')]
1100
+ root: Annotated[list[float], Field(max_length=3, min_length=3, title='Vector3d')]
1105
1101
  """
1106
1102
  A three-dimensional vector [x, y, z] with double precision.
1107
1103
 
@@ -1138,7 +1134,7 @@ class ConvexHull(BaseModel):
1138
1134
  """
1139
1135
 
1140
1136
  shape_type: Literal['convex_hull'] = 'convex_hull'
1141
- vertices: List[Vector3d]
1137
+ vertices: list[Vector3d]
1142
1138
  """
1143
1139
  The list of encapsulated points.
1144
1140
  """
@@ -1154,7 +1150,7 @@ class RotationVector(RootModel):
1154
1150
  """
1155
1151
 
1156
1152
  root: Annotated[
1157
- List[float], Field(max_length=3, min_length=3, title='RotationVector')
1153
+ list[float], Field(max_length=3, min_length=3, title='RotationVector')
1158
1154
  ]
1159
1155
  """
1160
1156
  Defines a rotation in 3D space.
@@ -1197,8 +1193,8 @@ class Pose(BaseModel):
1197
1193
 
1198
1194
  """
1199
1195
 
1200
- position: Optional[Vector3d] = None
1201
- orientation: Optional[RotationVector] = None
1196
+ position: Vector3d | None = None
1197
+ orientation: RotationVector | None = None
1202
1198
 
1203
1199
 
1204
1200
  class Collider(BaseModel):
@@ -1216,27 +1212,25 @@ class Collider(BaseModel):
1216
1212
  """
1217
1213
 
1218
1214
  shape: Annotated[
1219
- Union[
1220
- Sphere,
1221
- Box,
1222
- Rectangle,
1223
- Plane,
1224
- Cylinder,
1225
- Capsule,
1226
- RectangularCapsule,
1227
- ConvexHull,
1228
- ],
1215
+ Sphere
1216
+ | Box
1217
+ | Rectangle
1218
+ | Plane
1219
+ | Cylinder
1220
+ | Capsule
1221
+ | RectangularCapsule
1222
+ | ConvexHull,
1229
1223
  Field(discriminator='shape_type'),
1230
1224
  ]
1231
- pose: Optional[Pose] = None
1232
- margin: Optional[float] = 0
1225
+ pose: Pose | None = None
1226
+ margin: float | None = 0
1233
1227
  """
1234
1228
  Increases the shape's size in all dimensions. Applied in [mm]. Can be used to keep a safe distance to the shape.
1235
1229
  """
1236
1230
 
1237
1231
 
1238
1232
  class Link(RootModel):
1239
- root: Dict[str, Collider]
1233
+ root: dict[str, Collider]
1240
1234
 
1241
1235
 
1242
1236
  class LinkChain(RootModel):
@@ -1257,7 +1251,7 @@ class LinkChain(RootModel):
1257
1251
  """
1258
1252
 
1259
1253
  root: Annotated[
1260
- List[Link],
1254
+ list[Link],
1261
1255
  Field(
1262
1256
  examples=[
1263
1257
  [
@@ -1335,7 +1329,7 @@ class ControllerDescription(BaseModel):
1335
1329
  The data type to describe a robot controller.
1336
1330
  """
1337
1331
 
1338
- connected_motion_groups: List[str]
1332
+ connected_motion_groups: list[str]
1339
1333
  supports_freedrive: bool
1340
1334
  """
1341
1335
  Can this controller be moved through freedrive (true), or not (false).
@@ -1462,7 +1456,7 @@ class Joints(RootModel):
1462
1456
 
1463
1457
  """
1464
1458
 
1465
- root: List[float]
1459
+ root: list[float]
1466
1460
  """
1467
1461
  This structure describes a set of joint values, e.g., positions, currents, torques, of a motion group.
1468
1462
 
@@ -1502,7 +1496,7 @@ class MotionGroupStateJointLimitReached(BaseModel):
1502
1496
 
1503
1497
  """
1504
1498
 
1505
- limit_reached: List[bool]
1499
+ limit_reached: list[bool]
1506
1500
  """
1507
1501
  If true, operational (soft) jointLimit is reached for specific joint.
1508
1502
  """
@@ -1546,7 +1540,7 @@ class JoggingPausedNearJointLimit(BaseModel):
1546
1540
  """
1547
1541
 
1548
1542
  kind: Literal['PAUSED_NEAR_JOINT_LIMIT'] = 'PAUSED_NEAR_JOINT_LIMIT'
1549
- joint_indices: List[JointIndice]
1543
+ joint_indices: list[JointIndice]
1550
1544
 
1551
1545
 
1552
1546
  class JoggingPausedNearCollision(BaseModel):
@@ -1573,13 +1567,11 @@ class JoggingDetails(BaseModel):
1573
1567
  """
1574
1568
 
1575
1569
  state: Annotated[
1576
- Union[
1577
- JoggingRunning,
1578
- JoggingPausedByUser,
1579
- JoggingPausedOnIO,
1580
- JoggingPausedNearJointLimit,
1581
- JoggingPausedNearCollision,
1582
- ],
1570
+ JoggingRunning
1571
+ | JoggingPausedByUser
1572
+ | JoggingPausedOnIO
1573
+ | JoggingPausedNearJointLimit
1574
+ | JoggingPausedNearCollision,
1583
1575
  Field(discriminator='kind'),
1584
1576
  ]
1585
1577
  kind: Literal['JOGGING'] = 'JOGGING'
@@ -1670,13 +1662,11 @@ class TrajectoryDetails(BaseModel):
1670
1662
  """
1671
1663
  location: Location
1672
1664
  state: Annotated[
1673
- Union[
1674
- TrajectoryRunning,
1675
- TrajectoryPausedByUser,
1676
- TrajectoryEnded,
1677
- TrajectoryWaitForIO,
1678
- TrajectoryPausedOnIO,
1679
- ],
1665
+ TrajectoryRunning
1666
+ | TrajectoryPausedByUser
1667
+ | TrajectoryEnded
1668
+ | TrajectoryWaitForIO
1669
+ | TrajectoryPausedOnIO,
1680
1670
  Field(discriminator='kind'),
1681
1671
  ]
1682
1672
  kind: Literal['TRAJECTORY'] = 'TRAJECTORY'
@@ -1694,13 +1684,13 @@ class Execute(BaseModel):
1694
1684
 
1695
1685
  """
1696
1686
 
1697
- joint_position: List[float]
1687
+ joint_position: list[float]
1698
1688
  """
1699
1689
  Commanded joint position of each joint in [rad]. This command was sent in the time step the corresponding state was received.
1700
1690
 
1701
1691
  """
1702
1692
  details: Annotated[
1703
- Optional[Union[JoggingDetails, TrajectoryDetails]], Field(discriminator='kind')
1693
+ JoggingDetails | TrajectoryDetails | None, Field(discriminator='kind')
1704
1694
  ] = None
1705
1695
 
1706
1696
 
@@ -1737,19 +1727,19 @@ class MotionGroupState(BaseModel):
1737
1727
  Indicates whether the joint is in a limit for all joints of the motion group.
1738
1728
 
1739
1729
  """
1740
- joint_torque: Optional[Joints] = None
1730
+ joint_torque: Joints | None = None
1741
1731
  """
1742
1732
  Current joint torque of each joint in [Nm].
1743
1733
  Is only available if the robot controller supports it, e.g., available for UR controllers.
1744
1734
 
1745
1735
  """
1746
- joint_current: Optional[Joints] = None
1736
+ joint_current: Joints | None = None
1747
1737
  """
1748
1738
  Current at TCP in [A].
1749
1739
  Is only available if the robot controller supports it, e.g., available for UR controllers.
1750
1740
 
1751
1741
  """
1752
- flange_pose: Optional[Pose] = None
1742
+ flange_pose: Pose | None = None
1753
1743
  """
1754
1744
  Pose of the flange.
1755
1745
  Positions are in [mm].
@@ -1758,13 +1748,13 @@ class MotionGroupState(BaseModel):
1758
1748
  For robot arms a flange pose is always returned, for positioners the flange might not be available, depending on the model.
1759
1749
 
1760
1750
  """
1761
- tcp: Optional[str] = None
1751
+ tcp: str | None = None
1762
1752
  """
1763
1753
  Unique identifier addressing the active TCP.
1764
1754
  Might not be returned for positioners as some do not support TCPs, depending on the model.
1765
1755
 
1766
1756
  """
1767
- tcp_pose: Optional[Pose] = None
1757
+ tcp_pose: Pose | None = None
1768
1758
  """
1769
1759
  Pose of the TCP selected on the robot control panel.
1770
1760
  Positions are in [mm].
@@ -1773,14 +1763,14 @@ class MotionGroupState(BaseModel):
1773
1763
  Might not be returned for positioners as some do not support TCPs, depending on the model.
1774
1764
 
1775
1765
  """
1776
- coordinate_system: Optional[str] = None
1766
+ coordinate_system: str | None = None
1777
1767
  """
1778
1768
  Unique identifier addressing the reference coordinate system of the cartesian data.
1779
1769
  Might not be returned for positioners as some do not support TCPs, depending on the model.
1780
1770
  Default: world coordinate system of corresponding controller.
1781
1771
 
1782
1772
  """
1783
- payload: Optional[str] = None
1773
+ payload: str | None = None
1784
1774
  """
1785
1775
  Unique identifier addressing the active payload.
1786
1776
  Only fetchable via GET endpoint, not available in WebSocket.
@@ -1792,7 +1782,7 @@ class MotionGroupState(BaseModel):
1792
1782
  Convenience: Signals that NOVA treats measured joint velocities as 0.
1793
1783
 
1794
1784
  """
1795
- execute: Optional[Execute] = None
1785
+ execute: Execute | None = None
1796
1786
  """
1797
1787
  Data that was commanded to the motion group. Includes additional data on NOVA's execution components for executing trajectories and jogging.
1798
1788
  This is a convenience field to indicate the last command sent to the motion group.
@@ -1810,7 +1800,7 @@ class RobotControllerState(BaseModel):
1810
1800
  """
1811
1801
  Mode of communication and control between NOVA and the robot controller.
1812
1802
  """
1813
- last_error: Optional[List[str]] = None
1803
+ last_error: list[str] | None = None
1814
1804
  """
1815
1805
  Last error stack encountered during initialization process or after a controller disconnect.
1816
1806
  At this stage, it's unclear whether the error is fatal.
@@ -1837,14 +1827,14 @@ class RobotControllerState(BaseModel):
1837
1827
  """
1838
1828
  operation_mode: OperationMode
1839
1829
  safety_state: SafetyStateType
1840
- velocity_override: Annotated[Optional[int], Field(ge=1, le=100)] = None
1830
+ velocity_override: Annotated[int | None, Field(ge=1, le=100)] = None
1841
1831
  """
1842
1832
  If made available by the robot controller, returns the current velocity override in
1843
1833
  [percentage] for movements adjusted on robot control panel.
1844
1834
  Valid value range: 1 - 100.
1845
1835
 
1846
1836
  """
1847
- motion_groups: Annotated[List[MotionGroupState], Field(title='MotionGroupState[]')]
1837
+ motion_groups: Annotated[list[MotionGroupState], Field(title='MotionGroupState[]')]
1848
1838
  """
1849
1839
  State of indicated motion groups.
1850
1840
  In case of state request via controller all configured motion groups are returned.
@@ -1924,7 +1914,7 @@ class FloatValue(BaseModel):
1924
1914
 
1925
1915
  class IOBoundary(RootModel):
1926
1916
  root: Annotated[
1927
- Union[BooleanValue, IntegerValue, FloatValue],
1917
+ BooleanValue | IntegerValue | FloatValue,
1928
1918
  Field(discriminator='value_type', title='IOBoundary'),
1929
1919
  ]
1930
1920
 
@@ -1940,20 +1930,20 @@ class IODescription(BaseModel):
1940
1930
  Name of the input/output. Customize it on the physical controller or in the virtual robot specification.
1941
1931
 
1942
1932
  """
1943
- group: Optional[str] = None
1933
+ group: str | None = None
1944
1934
  """
1945
1935
  Name of the input/output group. Customize it on the physical controller or in the virtual robot specification.
1946
1936
 
1947
1937
  """
1948
1938
  direction: IODirection
1949
1939
  value_type: IOValueType
1950
- unit: Optional[UnitType] = None
1951
- min: Optional[IOBoundary] = None
1952
- max: Optional[IOBoundary] = None
1940
+ unit: UnitType | None = None
1941
+ min: IOBoundary | None = None
1942
+ max: IOBoundary | None = None
1953
1943
 
1954
1944
 
1955
1945
  class ListIODescriptionsResponse(RootModel):
1956
- root: List[IODescription]
1946
+ root: list[IODescription]
1957
1947
 
1958
1948
  def __getitem__(self, index: int) -> IODescription:
1959
1949
  """
@@ -2029,7 +2019,7 @@ class IOFloatValue(BaseModel):
2029
2019
 
2030
2020
  class IOValue(RootModel):
2031
2021
  root: Annotated[
2032
- Union[IOBooleanValue, IOIntegerValue, IOFloatValue],
2022
+ IOBooleanValue | IOIntegerValue | IOFloatValue,
2033
2023
  Field(discriminator='value_type'),
2034
2024
  ]
2035
2025
 
@@ -2039,7 +2029,7 @@ class StreamIOValuesResponse(BaseModel):
2039
2029
  Array of input/output values.
2040
2030
  """
2041
2031
 
2042
- io_values: List[IOValue]
2032
+ io_values: list[IOValue]
2043
2033
  timestamp: AwareDatetime
2044
2034
  """
2045
2035
  Timestamp indicating when the represented information was received from the robot controller.
@@ -2058,7 +2048,7 @@ class ListIOValuesResponse(RootModel):
2058
2048
  """
2059
2049
 
2060
2050
  root: Annotated[
2061
- List[IOValue],
2051
+ list[IOValue],
2062
2052
  Field(
2063
2053
  examples=[
2064
2054
  {
@@ -2211,7 +2201,7 @@ class Orientation(RootModel):
2211
2201
 
2212
2202
  """
2213
2203
 
2214
- root: Annotated[List[float], Field(max_length=4, min_length=3, title='Orientation')]
2204
+ root: Annotated[list[float], Field(max_length=4, min_length=3, title='Orientation')]
2215
2205
  """
2216
2206
  Describes an orientation in 3D space.
2217
2207
  A tree-to-four-dimensional vector [x, y, z, w] with double precision.
@@ -2244,17 +2234,17 @@ class Orientation(RootModel):
2244
2234
 
2245
2235
 
2246
2236
  class CoordinateSystemData(BaseModel):
2247
- name: Optional[str] = None
2237
+ name: str | None = None
2248
2238
  """
2249
2239
  Human readable name of this coordinate system.
2250
2240
  """
2251
- reference_coordinate_system: Optional[str] = None
2241
+ reference_coordinate_system: str | None = None
2252
2242
  """
2253
2243
  The identifier of the reference coordinate system. Empty if world is used.
2254
2244
  """
2255
- position: Optional[Vector3d] = None
2256
- orientation: Optional[Orientation] = None
2257
- orientation_type: Optional[OrientationType] = 'ROTATION_VECTOR'
2245
+ position: Vector3d | None = None
2246
+ orientation: Orientation | None = None
2247
+ orientation_type: OrientationType | None = 'ROTATION_VECTOR'
2258
2248
 
2259
2249
 
2260
2250
  class CoordinateSystem(CoordinateSystemData):
@@ -2265,7 +2255,7 @@ class CoordinateSystem(CoordinateSystemData):
2265
2255
 
2266
2256
 
2267
2257
  class ListCoordinateSystemsResponse(RootModel):
2268
- root: List[CoordinateSystem]
2258
+ root: list[CoordinateSystem]
2269
2259
 
2270
2260
  def __getitem__(self, index: int) -> CoordinateSystem:
2271
2261
  """
@@ -2312,7 +2302,7 @@ class ColliderDictionary(RootModel):
2312
2302
  A collection of identifiable colliders.
2313
2303
  """
2314
2304
 
2315
- root: Dict[str, Collider]
2305
+ root: dict[str, Collider]
2316
2306
 
2317
2307
 
2318
2308
  class LimitRange(BaseModel):
@@ -2320,37 +2310,37 @@ class LimitRange(BaseModel):
2320
2310
  The upper_limit must be greater then the lower_limit.
2321
2311
  """
2322
2312
 
2323
- lower_limit: Optional[float] = None
2324
- upper_limit: Optional[float] = None
2313
+ lower_limit: float | None = None
2314
+ upper_limit: float | None = None
2325
2315
 
2326
2316
 
2327
2317
  class JointLimits(BaseModel):
2328
- position: Optional[LimitRange] = None
2329
- velocity: Optional[float] = None
2330
- acceleration: Optional[float] = None
2331
- torque: Optional[float] = None
2318
+ position: LimitRange | None = None
2319
+ velocity: float | None = None
2320
+ acceleration: float | None = None
2321
+ torque: float | None = None
2332
2322
 
2333
2323
 
2334
2324
  class CartesianLimits(BaseModel):
2335
- velocity: Optional[float] = None
2336
- acceleration: Optional[float] = None
2337
- orientation_velocity: Optional[float] = None
2338
- orientation_acceleration: Optional[float] = None
2325
+ velocity: float | None = None
2326
+ acceleration: float | None = None
2327
+ orientation_velocity: float | None = None
2328
+ orientation_acceleration: float | None = None
2339
2329
 
2340
2330
 
2341
2331
  class LimitSet(BaseModel):
2342
- joints: Optional[List[JointLimits]] = None
2343
- tcp: Optional[CartesianLimits] = None
2344
- elbow: Optional[CartesianLimits] = None
2345
- flange: Optional[CartesianLimits] = None
2346
- coupled_shoulder_elbow_joint: Optional[JointLimits] = None
2332
+ joints: list[JointLimits] | None = None
2333
+ tcp: CartesianLimits | None = None
2334
+ elbow: CartesianLimits | None = None
2335
+ flange: CartesianLimits | None = None
2336
+ coupled_shoulder_elbow_joint: JointLimits | None = None
2347
2337
 
2348
2338
 
2349
2339
  class OperationLimits(BaseModel):
2350
- auto_limits: Optional[LimitSet] = None
2351
- manual_limits: Optional[LimitSet] = None
2352
- manual_t1_limits: Optional[LimitSet] = None
2353
- manual_t2_limits: Optional[LimitSet] = None
2340
+ auto_limits: LimitSet | None = None
2341
+ manual_limits: LimitSet | None = None
2342
+ manual_t1_limits: LimitSet | None = None
2343
+ manual_t2_limits: LimitSet | None = None
2354
2344
 
2355
2345
 
2356
2346
  class Payload(BaseModel):
@@ -2359,8 +2349,8 @@ class Payload(BaseModel):
2359
2349
  """
2360
2350
  Mass of payload in [kg].
2361
2351
  """
2362
- center_of_mass: Optional[Vector3d] = None
2363
- moment_of_inertia: Optional[Vector3d] = None
2352
+ center_of_mass: Vector3d | None = None
2353
+ moment_of_inertia: Vector3d | None = None
2364
2354
 
2365
2355
 
2366
2356
  class DHParameter(BaseModel):
@@ -2368,23 +2358,23 @@ class DHParameter(BaseModel):
2368
2358
  A single set of DH parameters.
2369
2359
  """
2370
2360
 
2371
- alpha: Optional[float] = None
2361
+ alpha: float | None = None
2372
2362
  """
2373
2363
  Angle about x-axis in [rad].
2374
2364
  """
2375
- theta: Optional[float] = None
2365
+ theta: float | None = None
2376
2366
  """
2377
2367
  Angle about z-axis in [rad].
2378
2368
  """
2379
- a: Optional[float] = None
2369
+ a: float | None = None
2380
2370
  """
2381
2371
  Offset along x-axis in [mm].
2382
2372
  """
2383
- d: Optional[float] = None
2373
+ d: float | None = None
2384
2374
  """
2385
2375
  Offset along z-axis in [mm].
2386
2376
  """
2387
- reverse_rotation_direction: Optional[bool] = None
2377
+ reverse_rotation_direction: bool | None = None
2388
2378
  """
2389
2379
  True, if rotation direction of joint is reversed.
2390
2380
  """
@@ -2396,30 +2386,30 @@ class MotionGroupDescription(BaseModel):
2396
2386
  """
2397
2387
 
2398
2388
  motion_group_model: MotionGroupModel
2399
- mounting: Optional[Pose] = None
2389
+ mounting: Pose | None = None
2400
2390
  """
2401
2391
  The offset from the world frame to the motion group base.
2402
2392
  """
2403
- tcps: Annotated[
2404
- Optional[Dict[str, TcpOffset]], Field(title='TcpOffsetDictionary')
2405
- ] = None
2393
+ tcps: Annotated[dict[str, TcpOffset] | None, Field(title='TcpOffsetDictionary')] = (
2394
+ None
2395
+ )
2406
2396
  """
2407
2397
  Maps a TCP name to its offset relative to the flange coordinate system. Key must be a TCP identifier.
2408
2398
  Values are TcpOffsets.
2409
2399
 
2410
2400
  """
2411
- safety_zones: Optional[ColliderDictionary] = None
2401
+ safety_zones: ColliderDictionary | None = None
2412
2402
  """
2413
2403
  SafetyZones are areas which cannot be entered or where certain limits apply.
2414
2404
  """
2415
- safety_link_colliders: Optional[List[ColliderDictionary]] = None
2405
+ safety_link_colliders: list[ColliderDictionary] | None = None
2416
2406
  """
2417
2407
  The shape of the MotionGroups links to validate against safety zones.
2418
2408
  Indexed along the kinematic chain, starting with a static base shape before first joint.
2419
2409
 
2420
2410
  """
2421
2411
  safety_tool_colliders: Annotated[
2422
- Optional[Dict[str, ColliderDictionary]], Field(title='SafetyToolColliders')
2412
+ dict[str, ColliderDictionary] | None, Field(title='SafetyToolColliders')
2423
2413
  ] = None
2424
2414
  """
2425
2415
  Maps a TCP name to its tool collider. Key must be a TCP identifier.
@@ -2427,22 +2417,27 @@ class MotionGroupDescription(BaseModel):
2427
2417
 
2428
2418
  """
2429
2419
  operation_limits: OperationLimits
2430
- payloads: Annotated[
2431
- Optional[Dict[str, Payload]], Field(title='PayloadDictionary')
2432
- ] = None
2420
+ payloads: Annotated[dict[str, Payload] | None, Field(title='PayloadDictionary')] = (
2421
+ None
2422
+ )
2433
2423
  """
2434
2424
  Maps a payload name to its configuration. Key must be a payload identifier.
2435
2425
  Values are payload objects.
2436
2426
 
2437
2427
  """
2438
- cycle_time: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2428
+ cycle_time: Annotated[int | None, Field(ge=0, le=2147483647)] = None
2439
2429
  """
2440
2430
  [ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.
2441
2431
  """
2442
- dh_parameters: Optional[List[DHParameter]] = None
2432
+ dh_parameters: list[DHParameter] | None = None
2443
2433
  """
2444
2434
  The DH parameters describing the motion group geometry, starting from base.
2445
2435
  """
2436
+ serial_number: str | None = None
2437
+ """
2438
+ The serial number of the motion group, if available. If not available, the serial number of the robot controller. If not available, empty.
2439
+
2440
+ """
2446
2441
 
2447
2442
 
2448
2443
  class Tool(RootModel):
@@ -2455,28 +2450,28 @@ class Tool(RootModel):
2455
2450
 
2456
2451
  """
2457
2452
 
2458
- root: Dict[str, Collider]
2453
+ root: dict[str, Collider]
2459
2454
 
2460
2455
 
2461
2456
  class CollisionSetup(BaseModel):
2462
- colliders: Optional[ColliderDictionary] = None
2457
+ colliders: ColliderDictionary | None = None
2463
2458
  """
2464
2459
  Colliders are checked against links and tool.
2465
2460
 
2466
2461
  """
2467
- link_chain: Optional[LinkChain] = None
2462
+ link_chain: LinkChain | None = None
2468
2463
  """
2469
2464
  The shape of the motion groups links to validate against colliders.
2470
2465
  Indexed along the kinematic chain, starting with a static base shape before first joint.
2471
2466
  The base of the motion group is not checked for collision against the environment.
2472
2467
 
2473
2468
  """
2474
- tool: Optional[Tool] = None
2469
+ tool: Tool | None = None
2475
2470
  """
2476
2471
  Shape of the tool to validate against colliders.
2477
2472
 
2478
2473
  """
2479
- self_collision_detection: Optional[bool] = True
2474
+ self_collision_detection: bool | None = True
2480
2475
  """
2481
2476
  If true, self-collision detection is enabled for the motion group.
2482
2477
 
@@ -2504,7 +2499,7 @@ class CollisionSetups(RootModel):
2504
2499
 
2505
2500
  """
2506
2501
 
2507
- root: Dict[str, CollisionSetup]
2502
+ root: dict[str, CollisionSetup]
2508
2503
 
2509
2504
 
2510
2505
  class MotionGroupSetup(BaseModel):
@@ -2513,18 +2508,18 @@ class MotionGroupSetup(BaseModel):
2513
2508
  """
2514
2509
  [ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.
2515
2510
  """
2516
- mounting: Optional[Pose] = None
2511
+ mounting: Pose | None = None
2517
2512
  """
2518
2513
  The offset from the world frame to the motion group base.
2519
2514
  """
2520
- tcp_offset: Optional[Pose] = None
2521
- global_limits: Optional[LimitSet] = None
2522
- payload: Optional[Payload] = None
2523
- collision_setups: Optional[CollisionSetups] = None
2515
+ tcp_offset: Pose | None = None
2516
+ global_limits: LimitSet | None = None
2517
+ payload: Payload | None = None
2518
+ collision_setups: CollisionSetups | None = None
2524
2519
 
2525
2520
 
2526
2521
  class DoubleArray(RootModel):
2527
- root: List[float]
2522
+ root: list[float]
2528
2523
 
2529
2524
  def __getitem__(self, index: int) -> float:
2530
2525
  """
@@ -2552,23 +2547,70 @@ class DoubleArray(RootModel):
2552
2547
 
2553
2548
 
2554
2549
  class BlendingAuto(BaseModel):
2555
- min_velocity_in_percent: Annotated[Optional[int], Field(ge=0, le=100)] = None
2550
+ min_velocity_in_percent: Annotated[int | None, Field(ge=0, le=100)] = None
2556
2551
  """
2557
- Auto-blending is used to keep a constant velocity when blending between two motion commands.
2552
+ Auto-blending is used to keep a constant velocity when blending between two motion commands. To use auto-blending, the TCP velocity limit must be set.
2558
2553
  It changes the TCP path around the target point of the motion command.
2559
- The value represents the percentage of the original velocity.
2554
+ The value represents the percentage of the original velocity. Auto-blending is always performed in cartesian space.
2560
2555
 
2561
2556
  """
2562
2557
  blending_name: Literal['BlendingAuto'] = 'BlendingAuto'
2563
2558
 
2564
2559
 
2560
+ class BlendingSpace(Enum):
2561
+ """
2562
+ Defines the space in which blending is performed.
2563
+ - `JOINT`: Zone blending is performed in joint space
2564
+ - `CARTESIAN`: Auto-blending is performed in cartesian space
2565
+
2566
+ """
2567
+
2568
+ JOINT = 'JOINT'
2569
+ CARTESIAN = 'CARTESIAN'
2570
+
2571
+
2565
2572
  class BlendingPosition(BaseModel):
2566
- position_zone_radius: Optional[float] = None
2573
+ position_zone_radius: float | None = None
2567
2574
  """
2568
2575
  Specifies the maximum radius in [mm] around the motion command's target point
2569
2576
  where the TCP path can be altered to blend the motion command into the following one.
2570
2577
  If auto-blending blends too much of the resulting trajectory, use position-blending to restrict the blending zone radius.
2571
2578
 
2579
+ """
2580
+ position_zone_percentage: Annotated[float | None, Field(ge=0.0, le=100.0)] = None
2581
+ """
2582
+ Specifies the maximum blending percentage based on the trajectory length in position space
2583
+ around the motion command's target point. Percentage indicated in 0.0 - 100.0.
2584
+
2585
+ """
2586
+ orientation_zone_radius: float | None = None
2587
+ """
2588
+ Specifies the maximum radius in [rad] for orientation blending around the motion command's
2589
+ target orientation. At the target's orientation, the TCP orientation can be altered to blend into the following motion.
2590
+
2591
+ """
2592
+ orientation_zone_percentage: Annotated[float | None, Field(ge=0.0, le=100.0)] = None
2593
+ """
2594
+ Specifies the maximum blending percentage for orientation blending
2595
+ based on the trajectory length in orientation space. Percentage indicated in 0.0 - 100.0.
2596
+
2597
+ """
2598
+ joints_zone_radius: float | None = None
2599
+ """
2600
+ Specifies the maximum radius in [rad] for joint space blending around the motion command's
2601
+ target joint configuration. At the target joint configuration, the joint path can be altered to blend into the following motion.
2602
+
2603
+ """
2604
+ joints_zone_percentage: Annotated[float | None, Field(ge=0.0, le=100.0)] = None
2605
+ """
2606
+ Specifies the maximum blending percentage for joint space blending
2607
+ based on the trajectory length in joint space. Percentage indicated in 0.0 to 100.0.
2608
+
2609
+ """
2610
+ space: BlendingSpace | None = None
2611
+ """
2612
+ Defines the space in which blending is performed.
2613
+
2572
2614
  """
2573
2615
  blending_name: Literal['BlendingPosition'] = 'BlendingPosition'
2574
2616
 
@@ -2579,34 +2621,34 @@ class LimitsOverride(BaseModel):
2579
2621
 
2580
2622
  """
2581
2623
 
2582
- joint_velocity_limits: Optional[List[float]] = None
2624
+ joint_velocity_limits: list[float] | None = None
2583
2625
  """
2584
2626
  Maximum joint velocity in [rad/s] for each joint.
2585
2627
  Either leave this field empty or set a value for each joint.
2586
2628
 
2587
2629
  """
2588
- joint_acceleration_limits: Optional[List[float]] = None
2630
+ joint_acceleration_limits: list[float] | None = None
2589
2631
  """
2590
2632
  Maximum joint acceleration in [rad/s^2] for each joint.
2591
2633
  Either leave this field empty or set a value for each joint.
2592
2634
 
2593
2635
  """
2594
- tcp_velocity_limit: Optional[float] = None
2636
+ tcp_velocity_limit: float | None = None
2595
2637
  """
2596
2638
  Maximum allowed TCP velocity in [mm/s].
2597
2639
 
2598
2640
  """
2599
- tcp_acceleration_limit: Optional[float] = None
2641
+ tcp_acceleration_limit: float | None = None
2600
2642
  """
2601
2643
  Maximum allowed TCP acceleration in [mm/s^2].
2602
2644
 
2603
2645
  """
2604
- tcp_orientation_velocity_limit: Optional[float] = None
2646
+ tcp_orientation_velocity_limit: float | None = None
2605
2647
  """
2606
2648
  Maximum allowed TCP rotation velocity in [rad/s].
2607
2649
 
2608
2650
  """
2609
- tcp_orientation_acceleration_limit: Optional[float] = None
2651
+ tcp_orientation_acceleration_limit: float | None = None
2610
2652
  """
2611
2653
  Maximum allowed TCP rotation acceleration in [rad/s^2].
2612
2654
 
@@ -2637,7 +2679,7 @@ class PathCubicSpline(BaseModel):
2637
2679
 
2638
2680
  """
2639
2681
 
2640
- parameters: List[CubicSplineParameter]
2682
+ parameters: list[CubicSplineParameter]
2641
2683
  path_definition_name: Literal['PathCubicSpline'] = 'PathCubicSpline'
2642
2684
 
2643
2685
 
@@ -2678,21 +2720,20 @@ class PathJointPTP(BaseModel):
2678
2720
 
2679
2721
  class MotionCommand(BaseModel):
2680
2722
  blending: Annotated[
2681
- Optional[Union[BlendingAuto, BlendingPosition]],
2682
- Field(discriminator='blending_name'),
2723
+ BlendingAuto | BlendingPosition | None, Field(discriminator='blending_name')
2683
2724
  ] = None
2684
2725
  """
2685
2726
  Blending alters the TCP path at the target point of a motion command
2686
2727
  to ensure that the velocity does not drop to zero between two motion commands.
2687
2728
 
2688
2729
  """
2689
- limits_override: Optional[LimitsOverride] = None
2730
+ limits_override: LimitsOverride | None = None
2690
2731
  """
2691
2732
  Limits override is used to override the global limits of the motion group for this segment of the motion.
2692
2733
 
2693
2734
  """
2694
2735
  path: Annotated[
2695
- Union[PathCartesianPTP, PathCubicSpline, PathLine, PathCircle, PathJointPTP],
2736
+ PathCartesianPTP | PathCubicSpline | PathLine | PathCircle | PathJointPTP,
2696
2737
  Field(discriminator='path_definition_name'),
2697
2738
  ]
2698
2739
 
@@ -2711,7 +2752,7 @@ class PlanTrajectoryRequest(BaseModel):
2711
2752
  To move the robot to the start joint position use the endpoint [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P).
2712
2753
 
2713
2754
  """
2714
- motion_commands: List[MotionCommand]
2755
+ motion_commands: list[MotionCommand]
2715
2756
  """
2716
2757
  List of motion commands. A command consists of a path definition (line, circle, joint_ptp, cartesian_ptp, cubic_spline), blending, and limits override.
2717
2758
 
@@ -2719,17 +2760,17 @@ class PlanTrajectoryRequest(BaseModel):
2719
2760
 
2720
2761
 
2721
2762
  class JointTrajectory(BaseModel):
2722
- joint_positions: List[Joints]
2763
+ joint_positions: list[Joints]
2723
2764
  """
2724
2765
  List of joint positions [rad] for each sample.
2725
2766
  The number of samples must match the number of timestamps provided in the times field.
2726
2767
 
2727
2768
  """
2728
- times: List[float]
2769
+ times: list[float]
2729
2770
  """
2730
2771
  Timestamp for each sample [s].
2731
2772
  """
2732
- locations: List[Location]
2773
+ locations: list[Location]
2733
2774
 
2734
2775
 
2735
2776
  class FeedbackOutOfWorkspace(BaseModel):
@@ -2737,7 +2778,7 @@ class FeedbackOutOfWorkspace(BaseModel):
2737
2778
  Requested TCP pose is outside of motion group's workspace.
2738
2779
  """
2739
2780
 
2740
- invalid_tcp_pose: Optional[Pose] = None
2781
+ invalid_tcp_pose: Pose | None = None
2741
2782
  error_feedback_name: Literal['FeedbackOutOfWorkspace'] = 'FeedbackOutOfWorkspace'
2742
2783
 
2743
2784
 
@@ -2758,8 +2799,8 @@ class FeedbackSingularity(BaseModel):
2758
2799
 
2759
2800
  """
2760
2801
 
2761
- singularity_type: Optional[SingularityTypeEnum] = None
2762
- singular_joint_position: Optional[DoubleArray] = None
2802
+ singularity_type: SingularityTypeEnum | None = None
2803
+ singular_joint_position: DoubleArray | None = None
2763
2804
  error_feedback_name: Literal['FeedbackSingularity'] = 'FeedbackSingularity'
2764
2805
 
2765
2806
 
@@ -2770,46 +2811,44 @@ class FeedbackJointLimitExceeded(BaseModel):
2770
2811
 
2771
2812
  """
2772
2813
 
2773
- joint_index: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2774
- joint_position: Optional[DoubleArray] = None
2814
+ joint_index: Annotated[int | None, Field(ge=0, le=2147483647)] = None
2815
+ joint_position: DoubleArray | None = None
2775
2816
  error_feedback_name: Literal['FeedbackJointLimitExceeded'] = (
2776
2817
  'FeedbackJointLimitExceeded'
2777
2818
  )
2778
2819
 
2779
2820
 
2780
2821
  class CollisionContact(BaseModel):
2781
- local: Optional[Vector3d] = None
2782
- root: Optional[Vector3d] = None
2822
+ local: Vector3d | None = None
2823
+ root: Vector3d | None = None
2783
2824
 
2784
2825
 
2785
2826
  class Collision(BaseModel):
2786
- id_of_a: Optional[str] = None
2787
- id_of_b: Optional[str] = None
2788
- id_of_layer: Optional[str] = None
2789
- normal_root_on_b: Optional[Vector3d] = None
2790
- position_on_a: Optional[CollisionContact] = None
2791
- position_on_b: Optional[CollisionContact] = None
2827
+ id_of_a: str | None = None
2828
+ id_of_b: str | None = None
2829
+ id_of_layer: str | None = None
2830
+ normal_root_on_b: Vector3d | None = None
2831
+ position_on_a: CollisionContact | None = None
2832
+ position_on_b: CollisionContact | None = None
2792
2833
 
2793
2834
 
2794
2835
  class FeedbackCollision(BaseModel):
2795
- collisions: Optional[List[Collision]] = None
2796
- joint_position: Optional[DoubleArray] = None
2797
- tcp_pose: Optional[Pose] = None
2836
+ collisions: list[Collision] | None = None
2837
+ joint_position: DoubleArray | None = None
2838
+ tcp_pose: Pose | None = None
2798
2839
  error_feedback_name: Literal['FeedbackCollision'] = 'FeedbackCollision'
2799
2840
 
2800
2841
 
2801
2842
  class PlanTrajectoryFailedResponse(BaseModel):
2802
2843
  error_feedback: Annotated[
2803
- Union[
2804
- FeedbackOutOfWorkspace,
2805
- FeedbackSingularity,
2806
- FeedbackJointLimitExceeded,
2807
- FeedbackCollision,
2808
- ],
2844
+ FeedbackOutOfWorkspace
2845
+ | FeedbackSingularity
2846
+ | FeedbackJointLimitExceeded
2847
+ | FeedbackCollision,
2809
2848
  Field(discriminator='error_feedback_name'),
2810
2849
  ]
2811
2850
  error_location_on_trajectory: Location
2812
- joint_trajectory: Optional[JointTrajectory] = None
2851
+ joint_trajectory: JointTrajectory | None = None
2813
2852
  """
2814
2853
  The joint trajectory from the start joint position to the error.
2815
2854
 
@@ -2817,14 +2856,14 @@ class PlanTrajectoryFailedResponse(BaseModel):
2817
2856
 
2818
2857
 
2819
2858
  class PlanTrajectoryResponse(BaseModel):
2820
- response: Union[JointTrajectory, PlanTrajectoryFailedResponse]
2859
+ response: JointTrajectory | PlanTrajectoryFailedResponse
2821
2860
 
2822
2861
 
2823
2862
  class ValidationError(BaseModel):
2824
- loc: Annotated[List[Union[str, int]], Field(title='Location')]
2863
+ loc: Annotated[list[str | int], Field(title='Location')]
2825
2864
  msg: Annotated[str, Field(title='Message')]
2826
2865
  type: Annotated[str, Field(title='Error Type')]
2827
- input: Dict[str, Any]
2866
+ input: dict[str, Any]
2828
2867
 
2829
2868
 
2830
2869
  class ErrorInvalidJointCount(BaseModel):
@@ -2853,12 +2892,12 @@ class ErrorJointLimitExceeded(BaseModel):
2853
2892
 
2854
2893
  """
2855
2894
 
2856
- joint_index: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2895
+ joint_index: Annotated[int | None, Field(ge=0, le=2147483647)] = None
2857
2896
  """
2858
2897
  Index of the joint exceeding its limits (0-based).
2859
2898
 
2860
2899
  """
2861
- joint_position: Optional[DoubleArray] = None
2900
+ joint_position: DoubleArray | None = None
2862
2901
  """
2863
2902
  The joint position violating the limits.
2864
2903
 
@@ -2872,8 +2911,8 @@ class ErrorJointPositionCollision(BaseModel):
2872
2911
 
2873
2912
  """
2874
2913
 
2875
- collisions: Optional[List[Collision]] = None
2876
- joint_position: Optional[DoubleArray] = None
2914
+ collisions: list[Collision] | None = None
2915
+ joint_position: DoubleArray | None = None
2877
2916
  """
2878
2917
  The joint position that collides.
2879
2918
 
@@ -2885,13 +2924,10 @@ class ErrorJointPositionCollision(BaseModel):
2885
2924
 
2886
2925
  class PlanValidationError(ValidationError):
2887
2926
  data: Annotated[
2888
- Optional[
2889
- Union[
2890
- ErrorInvalidJointCount,
2891
- ErrorJointLimitExceeded,
2892
- ErrorJointPositionCollision,
2893
- ]
2894
- ],
2927
+ ErrorInvalidJointCount
2928
+ | ErrorJointLimitExceeded
2929
+ | ErrorJointPositionCollision
2930
+ | None,
2895
2931
  Field(discriminator='error_feedback_name'),
2896
2932
  ] = None
2897
2933
  """
@@ -2901,7 +2937,7 @@ class PlanValidationError(ValidationError):
2901
2937
 
2902
2938
 
2903
2939
  class Plan422Response(BaseModel):
2904
- detail: Annotated[Optional[List[PlanValidationError]], Field(title='Detail')] = None
2940
+ detail: Annotated[list[PlanValidationError] | None, Field(title='Detail')] = None
2905
2941
 
2906
2942
 
2907
2943
  class RRTConnectAlgorithm(BaseModel):
@@ -2916,25 +2952,25 @@ class RRTConnectAlgorithm(BaseModel):
2916
2952
  This is a custom implementation optimized for manipulator kinematics and collision checking in industrial contexts.
2917
2953
 
2918
2954
  """
2919
- max_iterations: Annotated[Optional[int], Field(ge=1)] = 10000
2955
+ max_iterations: Annotated[int | None, Field(ge=1)] = 10000
2920
2956
  """
2921
2957
  Maximum number of iterations for the RRT Connect algorithm.
2922
2958
  Higher values increase likelihood of success, but also computation time.
2923
2959
 
2924
2960
  """
2925
- max_step_size: Optional[float] = 1
2961
+ max_step_size: float | None = 1
2926
2962
  """
2927
2963
  Maximum step size for tree extension in joint space.
2928
2964
  """
2929
- adaptive_step_size: Optional[bool] = True
2965
+ adaptive_step_size: bool | None = True
2930
2966
  """
2931
2967
  Adjust the maximum step size during the search based on the recent success rate of tree expansion.
2932
2968
  """
2933
- apply_smoothing: Optional[bool] = True
2969
+ apply_smoothing: bool | None = True
2934
2970
  """
2935
2971
  Apply smoothing after the search has succeeded. This will remove as many intermediate points as possible while keeping the path valid.
2936
2972
  """
2937
- apply_blending: Optional[bool] = True
2973
+ apply_blending: bool | None = True
2938
2974
  """
2939
2975
  Apply blending after the search has succeeded and smoothing has been applied. This will apply the largest viable blending at each intermediate point.
2940
2976
  """
@@ -2949,7 +2985,7 @@ class MidpointInsertionAlgorithm(BaseModel):
2949
2985
  This algorithm adds a single midpoint between the start and target joint position to find collision-free paths.
2950
2986
 
2951
2987
  """
2952
- max_iterations: Annotated[Optional[int], Field(ge=1)] = 1000
2988
+ max_iterations: Annotated[int | None, Field(ge=1)] = 1000
2953
2989
  """
2954
2990
  Maximum number of iterations for the midpoint insertion algorithm.
2955
2991
  Higher values increase likelyhood of success, but also computation time (linear).
@@ -2959,7 +2995,7 @@ class MidpointInsertionAlgorithm(BaseModel):
2959
2995
 
2960
2996
  class CollisionFreeAlgorithm(RootModel):
2961
2997
  root: Annotated[
2962
- Union[RRTConnectAlgorithm, MidpointInsertionAlgorithm],
2998
+ RRTConnectAlgorithm | MidpointInsertionAlgorithm,
2963
2999
  Field(discriminator='algorithm_name', title='CollisionFreeAlgorithm'),
2964
3000
  ]
2965
3001
  """
@@ -3003,7 +3039,7 @@ class ErrorMaxIterationsExceeded(BaseModel):
3003
3039
 
3004
3040
  """
3005
3041
 
3006
- max_iterations: Optional[int] = None
3042
+ max_iterations: int | None = None
3007
3043
  """
3008
3044
  The maximum number of iterations that was reached.
3009
3045
 
@@ -3030,7 +3066,7 @@ class PlanCollisionFreeResponse(BaseModel):
3030
3066
 
3031
3067
  """
3032
3068
 
3033
- response: Union[JointTrajectory, PlanCollisionFreeFailedResponse]
3069
+ response: JointTrajectory | PlanCollisionFreeFailedResponse
3034
3070
 
3035
3071
 
3036
3072
  class JointPositionLimits(RootModel):
@@ -3039,7 +3075,7 @@ class JointPositionLimits(RootModel):
3039
3075
 
3040
3076
  """
3041
3077
 
3042
- root: Annotated[List[LimitRange], Field(title='JointPositionLimits')]
3078
+ root: Annotated[list[LimitRange], Field(title='JointPositionLimits')]
3043
3079
  """
3044
3080
  Joint position limits in [rad], indexed starting from base.
3045
3081
 
@@ -3072,27 +3108,27 @@ class JointPositionLimits(RootModel):
3072
3108
 
3073
3109
  class InverseKinematicsRequest(BaseModel):
3074
3110
  motion_group_model: MotionGroupModel
3075
- tcp_poses: List[Pose]
3111
+ tcp_poses: list[Pose]
3076
3112
  """
3077
3113
  List of TCP poses for which the inverse solutions are computed.
3078
3114
 
3079
3115
  """
3080
- tcp_offset: Optional[Pose] = None
3081
- mounting: Optional[Pose] = None
3116
+ tcp_offset: Pose | None = None
3117
+ mounting: Pose | None = None
3082
3118
  """
3083
3119
  Offset from the world frame to the motion group base.
3084
3120
  """
3085
- joint_position_limits: Optional[JointPositionLimits] = None
3086
- collision_setups: Optional[CollisionSetups] = None
3121
+ joint_position_limits: JointPositionLimits | None = None
3122
+ collision_setups: CollisionSetups | None = None
3087
3123
 
3088
3124
 
3089
3125
  class InverseKinematicsResponse(BaseModel):
3090
- joints: List[List[DoubleArray]]
3126
+ joints: list[list[DoubleArray]]
3091
3127
 
3092
3128
 
3093
3129
  class InverseKinematicsValidationError(ValidationError):
3094
3130
  data: Annotated[
3095
- Optional[Union[ErrorInvalidJointCount, ErrorJointLimitExceeded]],
3131
+ ErrorInvalidJointCount | ErrorJointLimitExceeded | None,
3096
3132
  Field(discriminator='error_feedback_name'),
3097
3133
  ] = None
3098
3134
  """
@@ -3103,26 +3139,26 @@ class InverseKinematicsValidationError(ValidationError):
3103
3139
 
3104
3140
  class InverseKinematics422Response(BaseModel):
3105
3141
  detail: Annotated[
3106
- Optional[List[InverseKinematicsValidationError]], Field(title='Detail')
3142
+ list[InverseKinematicsValidationError] | None, Field(title='Detail')
3107
3143
  ] = None
3108
3144
 
3109
3145
 
3110
3146
  class ForwardKinematicsRequest(BaseModel):
3111
3147
  motion_group_model: MotionGroupModel
3112
- joint_positions: List[DoubleArray]
3148
+ joint_positions: list[DoubleArray]
3113
3149
  """
3114
3150
  List of joint positions [rad] for which TCP poses are computed.
3115
3151
 
3116
3152
  """
3117
- tcp_offset: Optional[Pose] = None
3118
- mounting: Optional[Pose] = None
3153
+ tcp_offset: Pose | None = None
3154
+ mounting: Pose | None = None
3119
3155
  """
3120
3156
  Offset from the world frame to the motion group base.
3121
3157
  """
3122
3158
 
3123
3159
 
3124
3160
  class ForwardKinematicsResponse(BaseModel):
3125
- tcp_poses: List[Pose]
3161
+ tcp_poses: list[Pose]
3126
3162
  """
3127
3163
  List of computed TCP poses corresponding to the input joint positions.
3128
3164
 
@@ -3130,17 +3166,17 @@ class ForwardKinematicsResponse(BaseModel):
3130
3166
 
3131
3167
 
3132
3168
  class ForwardKinematicsValidationError(ValidationError):
3133
- data: Optional[ErrorInvalidJointCount] = None
3169
+ data: ErrorInvalidJointCount | None = None
3134
3170
 
3135
3171
 
3136
3172
  class ForwardKinematics422Response(BaseModel):
3137
3173
  detail: Annotated[
3138
- Optional[List[ForwardKinematicsValidationError]], Field(title='Detail')
3174
+ list[ForwardKinematicsValidationError] | None, Field(title='Detail')
3139
3175
  ] = None
3140
3176
 
3141
3177
 
3142
3178
  class ListTrajectoriesResponse(BaseModel):
3143
- trajectories: Optional[List[str]] = None
3179
+ trajectories: list[str] | None = None
3144
3180
  """
3145
3181
  Identifiers of trajectories which are currently cached.
3146
3182
  Use [addTrajectory](addTrajectory) to add a new trajectory. Adding trajectories is necessary to execute them.
@@ -3160,7 +3196,7 @@ class AddTrajectoryRequest(BaseModel):
3160
3196
  an equal number of corresponding timestamps.
3161
3197
 
3162
3198
  """
3163
- tcp: Optional[str] = None
3199
+ tcp: str | None = None
3164
3200
  """
3165
3201
  Unique identifier of the tool the trajectory is planned for.
3166
3202
  """
@@ -3171,13 +3207,13 @@ class TcpRequiredError(BaseModel):
3171
3207
  Requested motion group requires TCP to be defined.
3172
3208
  """
3173
3209
 
3174
- tcp_missing: Optional[Dict[str, Any]] = None
3210
+ tcp_missing: dict[str, Any] | None = None
3175
3211
 
3176
3212
 
3177
3213
  class InconsistentTrajectorySize(BaseModel):
3178
- joint_position_size: Optional[int] = None
3179
- times_size: Optional[int] = None
3180
- locations_size: Optional[int] = None
3214
+ joint_position_size: int | None = None
3215
+ times_size: int | None = None
3216
+ locations_size: int | None = None
3181
3217
 
3182
3218
 
3183
3219
  class InconsistentTrajectorySizeError(BaseModel):
@@ -3186,24 +3222,24 @@ class InconsistentTrajectorySizeError(BaseModel):
3186
3222
 
3187
3223
  """
3188
3224
 
3189
- inconsistent_trajectory_size: Optional[InconsistentTrajectorySize] = None
3225
+ inconsistent_trajectory_size: InconsistentTrajectorySize | None = None
3190
3226
 
3191
3227
 
3192
3228
  class JointLimitExceededError(BaseModel):
3193
- joint_limit_exceeded: Optional[FeedbackJointLimitExceeded] = None
3229
+ joint_limit_exceeded: FeedbackJointLimitExceeded | None = None
3194
3230
 
3195
3231
 
3196
3232
  class CollisionError(BaseModel):
3197
- collision: Optional[FeedbackCollision] = None
3233
+ collision: FeedbackCollision | None = None
3198
3234
 
3199
3235
 
3200
3236
  class TorqueExceeded(BaseModel):
3201
- torque_value: Optional[float] = None
3237
+ torque_value: float | None = None
3202
3238
  """
3203
3239
  The torque value that was exceeded.
3204
3240
 
3205
3241
  """
3206
- torque_limit: Optional[float] = None
3242
+ torque_limit: float | None = None
3207
3243
  """
3208
3244
  The value of the torque limit that was exceeded.
3209
3245
 
@@ -3211,23 +3247,23 @@ class TorqueExceeded(BaseModel):
3211
3247
 
3212
3248
 
3213
3249
  class TorqueExceededError(BaseModel):
3214
- torque_exceeded: Optional[TorqueExceeded] = None
3250
+ torque_exceeded: TorqueExceeded | None = None
3215
3251
 
3216
3252
 
3217
3253
  class InvalidDof(BaseModel):
3218
- valid_dof: Optional[int] = None
3254
+ valid_dof: int | None = None
3219
3255
  """
3220
3256
  The valid degrees of freedom for the motion group.
3221
3257
 
3222
3258
  """
3223
- joint_position: Optional[List[float]] = None
3259
+ joint_position: list[float] | None = None
3224
3260
  """
3225
3261
  The joint position that is out of its limits.
3226
3262
  """
3227
3263
 
3228
3264
 
3229
3265
  class InvalidDofError(BaseModel):
3230
- invalid_dof: Optional[InvalidDof] = None
3266
+ invalid_dof: InvalidDof | None = None
3231
3267
 
3232
3268
 
3233
3269
  class NanValue(BaseModel):
@@ -3235,33 +3271,32 @@ class NanValue(BaseModel):
3235
3271
  Requested joint position contains NaN values.
3236
3272
  """
3237
3273
 
3238
- joint_position: Optional[List[float]] = None
3274
+ joint_position: list[float] | None = None
3239
3275
  """
3240
3276
  The joint position that is out of its limits.
3241
3277
  """
3242
3278
 
3243
3279
 
3244
3280
  class NanValueError(BaseModel):
3245
- nan_value: Optional[NanValue] = None
3281
+ nan_value: NanValue | None = None
3246
3282
  """
3247
3283
  Requested joint position contains NaN values.
3248
3284
  """
3249
3285
 
3250
3286
 
3251
3287
  class AddTrajectoryError(BaseModel):
3252
- message: Optional[str] = None
3253
- location: Optional[Location] = None
3254
- data: Optional[
3255
- Union[
3256
- TcpRequiredError,
3257
- InconsistentTrajectorySizeError,
3258
- JointLimitExceededError,
3259
- CollisionError,
3260
- TorqueExceededError,
3261
- InvalidDofError,
3262
- NanValueError,
3263
- ]
3264
- ] = None
3288
+ message: str | None = None
3289
+ location: Location | None = None
3290
+ data: (
3291
+ TcpRequiredError
3292
+ | InconsistentTrajectorySizeError
3293
+ | JointLimitExceededError
3294
+ | CollisionError
3295
+ | TorqueExceededError
3296
+ | InvalidDofError
3297
+ | NanValueError
3298
+ | None
3299
+ ) = None
3265
3300
 
3266
3301
 
3267
3302
  class AddTrajectoryResponse(BaseModel):
@@ -3276,12 +3311,12 @@ class AddTrajectoryResponse(BaseModel):
3276
3311
 
3277
3312
  """
3278
3313
 
3279
- trajectory: Optional[str] = None
3314
+ trajectory: str | None = None
3280
3315
  """
3281
3316
  The unique identifier of the trajectory. Use this identifier to execute the trajectory with the [executeTrajectory](executeTrajectory) endpoint.
3282
3317
 
3283
3318
  """
3284
- error: Optional[AddTrajectoryError] = None
3319
+ error: AddTrajectoryError | None = None
3285
3320
  """
3286
3321
  Always check this field first. If this field is present, the trajectory has an error and is only partially or not executable.
3287
3322
 
@@ -3324,7 +3359,7 @@ class TrajectoryData(BaseModel):
3324
3359
  Type specifier for server, set automatically.
3325
3360
 
3326
3361
  """
3327
- motion_group: Optional[str] = None
3362
+ motion_group: str | None = None
3328
3363
  """
3329
3364
  Identifier of the motion-group.
3330
3365
  """
@@ -3334,7 +3369,7 @@ class TrajectoryData(BaseModel):
3334
3369
  an equal number of corresponding timestamps.
3335
3370
 
3336
3371
  """
3337
- tcp: Optional[str] = None
3372
+ tcp: str | None = None
3338
3373
  """
3339
3374
  Unique identifier of the tool the trajectory is planned for.
3340
3375
  """
@@ -3354,14 +3389,14 @@ class InitializeMovementRequest(BaseModel):
3354
3389
 
3355
3390
  """
3356
3391
  trajectory: Annotated[
3357
- Union[TrajectoryId, TrajectoryData], Field(discriminator='message_type')
3392
+ TrajectoryId | TrajectoryData, Field(discriminator='message_type')
3358
3393
  ]
3359
3394
  """
3360
3395
  The trajectory which should be executed and locked to the connection.
3361
3396
 
3362
3397
  """
3363
- initial_location: Optional[Location] = None
3364
- response_coordinate_system: Optional[str] = None
3398
+ initial_location: Location | None = None
3399
+ response_coordinate_system: str | None = None
3365
3400
  """
3366
3401
  Unique identifier addressing a coordinate system to which the responses are transformed.
3367
3402
  If not set, world coordinate system is used.
@@ -3449,26 +3484,26 @@ class StartMovementRequest(BaseModel):
3449
3484
  Type specifier for server, set automatically.
3450
3485
 
3451
3486
  """
3452
- direction: Optional[Direction] = 'DIRECTION_FORWARD'
3453
- target_location: Optional[Location] = None
3487
+ direction: Direction | None = 'DIRECTION_FORWARD'
3488
+ target_location: Location | None = None
3454
3489
  """
3455
3490
  The target location to which the motion group moves along the trajectory to.
3456
3491
  If `direction` and `target_location` are both specified, target location takes precedence.
3457
3492
  If neither is specified, the default is `DIRECTION_FORWARD`.
3458
3493
 
3459
3494
  """
3460
- set_outputs: Optional[List[SetIO]] = None
3495
+ set_outputs: list[SetIO] | None = None
3461
3496
  """
3462
3497
  Attaches a list of output commands to the trajectory. The outputs are set to the specified values right after the specified location was reached.
3463
3498
  If the specified location is located before the start location (forward direction: value is smaller, backward direction: value is bigger), the output is not set.
3464
3499
 
3465
3500
  """
3466
- start_on_io: Optional[StartOnIO] = None
3501
+ start_on_io: StartOnIO | None = None
3467
3502
  """
3468
3503
  Defines an input/output that is listened to before the movement. Execution starts if the defined comparator evaluates to `true`.
3469
3504
 
3470
3505
  """
3471
- pause_on_io: Optional[PauseOnIO] = None
3506
+ pause_on_io: PauseOnIO | None = None
3472
3507
  """
3473
3508
  Defines an input/output that is listened to during the movement. Execution pauses if the defined comparator evaluates to `true`.
3474
3509
 
@@ -3512,12 +3547,10 @@ class PlaybackSpeedRequest(BaseModel):
3512
3547
 
3513
3548
  class ExecuteTrajectoryRequest(RootModel):
3514
3549
  root: Annotated[
3515
- Union[
3516
- InitializeMovementRequest,
3517
- StartMovementRequest,
3518
- PauseMovementRequest,
3519
- PlaybackSpeedRequest,
3520
- ],
3550
+ InitializeMovementRequest
3551
+ | StartMovementRequest
3552
+ | PauseMovementRequest
3553
+ | PlaybackSpeedRequest,
3521
3554
  Field(discriminator='message_type', title='ExecuteTrajectoryRequest'),
3522
3555
  ]
3523
3556
 
@@ -3528,11 +3561,11 @@ class InitializeMovementResponse(BaseModel):
3528
3561
 
3529
3562
  """
3530
3563
 
3531
- message: Optional[str] = None
3564
+ message: str | None = None
3532
3565
  """
3533
3566
  Error message in case of invalid InitializeMovementRequest.
3534
3567
  """
3535
- add_trajectory_error: Optional[AddTrajectoryError] = None
3568
+ add_trajectory_error: AddTrajectoryError | None = None
3536
3569
  """
3537
3570
  Error can occur if joint trajectory was added by [InitializeMovementRequest](InitializeMovementRequest) and the trajectory is invalid.
3538
3571
 
@@ -3548,7 +3581,7 @@ class StartMovementResponse(BaseModel):
3548
3581
 
3549
3582
  """
3550
3583
 
3551
- message: Optional[str] = None
3584
+ message: str | None = None
3552
3585
  """
3553
3586
  Error message in case of invalid StartMovementResquest.
3554
3587
  """
@@ -3563,7 +3596,7 @@ class PauseMovementResponse(BaseModel):
3563
3596
 
3564
3597
  """
3565
3598
 
3566
- message: Optional[str] = None
3599
+ message: str | None = None
3567
3600
  """
3568
3601
  Error message in case of invalid PauseMovementResquest.
3569
3602
  """
@@ -3576,7 +3609,7 @@ class PlaybackSpeedResponse(BaseModel):
3576
3609
 
3577
3610
  """
3578
3611
 
3579
- message: Optional[str] = None
3612
+ message: str | None = None
3580
3613
  """
3581
3614
  Error message in case of invalid PlaybackSpeedRequest.
3582
3615
  """
@@ -3598,13 +3631,11 @@ class MovementErrorResponse(BaseModel):
3598
3631
 
3599
3632
  class ExecuteTrajectoryResponse(RootModel):
3600
3633
  root: Annotated[
3601
- Union[
3602
- InitializeMovementResponse,
3603
- StartMovementResponse,
3604
- PauseMovementResponse,
3605
- PlaybackSpeedResponse,
3606
- MovementErrorResponse,
3607
- ],
3634
+ InitializeMovementResponse
3635
+ | StartMovementResponse
3636
+ | PauseMovementResponse
3637
+ | PlaybackSpeedResponse
3638
+ | MovementErrorResponse,
3608
3639
  Field(discriminator='kind', title='ExecuteTrajectoryResponse'),
3609
3640
  ]
3610
3641
 
@@ -3623,12 +3654,12 @@ class InitializeJoggingRequest(BaseModel):
3623
3654
  """
3624
3655
  Identifier of the motion group.
3625
3656
  """
3626
- tcp: Optional[str] = None
3657
+ tcp: str | None = None
3627
3658
  """
3628
3659
  Identifier of the tool. Required for robots (all limits, including TCP limits, are respected at all times regardless of the motion). Not required for external axes.
3629
3660
 
3630
3661
  """
3631
- response_coordinate_system: Optional[str] = None
3662
+ response_coordinate_system: str | None = None
3632
3663
  """
3633
3664
  Unique identifier addressing a coordinate system to which the responses are transformed.
3634
3665
  If not set, world coordinate system is used.
@@ -3666,7 +3697,7 @@ class TcpVelocityRequest(BaseModel):
3666
3697
  """
3667
3698
  translation: Vector3d
3668
3699
  rotation: Vector3d
3669
- use_tool_coordinate_system: Optional[bool] = False
3700
+ use_tool_coordinate_system: bool | None = False
3670
3701
  """
3671
3702
  If true, TCP velocities are interpreted in the tool coordinate system, specified by the TCP.
3672
3703
  If false, TCP velocities are interpreted in the world coordinate system.
@@ -3689,12 +3720,10 @@ class PauseJoggingRequest(BaseModel):
3689
3720
 
3690
3721
  class ExecuteJoggingRequest(RootModel):
3691
3722
  root: Annotated[
3692
- Union[
3693
- InitializeJoggingRequest,
3694
- JointVelocityRequest,
3695
- TcpVelocityRequest,
3696
- PauseJoggingRequest,
3697
- ],
3723
+ InitializeJoggingRequest
3724
+ | JointVelocityRequest
3725
+ | TcpVelocityRequest
3726
+ | PauseJoggingRequest,
3698
3727
  Field(discriminator='message_type', title='ExecuteJoggingRequest'),
3699
3728
  ]
3700
3729
 
@@ -3705,7 +3734,7 @@ class InitializeJoggingResponse(BaseModel):
3705
3734
 
3706
3735
  """
3707
3736
 
3708
- message: Optional[str] = None
3737
+ message: str | None = None
3709
3738
  """
3710
3739
  Error message in case of invalid InitializeJoggingRequest.
3711
3740
  """
@@ -3718,7 +3747,7 @@ class PauseJoggingResponse(BaseModel):
3718
3747
 
3719
3748
  """
3720
3749
 
3721
- message: Optional[str] = None
3750
+ message: str | None = None
3722
3751
  """
3723
3752
  Error message in case of invalid PauseJoggingRequest.
3724
3753
  """
@@ -3731,7 +3760,7 @@ class TcpVelocityResponse(BaseModel):
3731
3760
 
3732
3761
  """
3733
3762
 
3734
- message: Optional[str] = None
3763
+ message: str | None = None
3735
3764
  """
3736
3765
  Error message in case of invalid TcpVelocityRequest.
3737
3766
  """
@@ -3744,7 +3773,7 @@ class JointVelocityResponse(BaseModel):
3744
3773
 
3745
3774
  """
3746
3775
 
3747
- message: Optional[str] = None
3776
+ message: str | None = None
3748
3777
  """
3749
3778
  Error message in case of invalid JointVelocityRequest.
3750
3779
  """
@@ -3753,13 +3782,11 @@ class JointVelocityResponse(BaseModel):
3753
3782
 
3754
3783
  class ExecuteJoggingResponse(RootModel):
3755
3784
  root: Annotated[
3756
- Union[
3757
- InitializeJoggingResponse,
3758
- PauseJoggingResponse,
3759
- TcpVelocityResponse,
3760
- JointVelocityResponse,
3761
- MovementErrorResponse,
3762
- ],
3785
+ InitializeJoggingResponse
3786
+ | PauseJoggingResponse
3787
+ | TcpVelocityResponse
3788
+ | JointVelocityResponse
3789
+ | MovementErrorResponse,
3763
3790
  Field(discriminator='kind', title='ExecuteJoggingResponse'),
3764
3791
  ]
3765
3792
 
@@ -3779,14 +3806,14 @@ class Program(BaseModel):
3779
3806
  title='Unique program identifier',
3780
3807
  ),
3781
3808
  ]
3782
- name: Annotated[Optional[str], Field(title='Program name')] = None
3783
- description: Annotated[Optional[str], Field(title='Program description')] = None
3809
+ name: Annotated[str | None, Field(title='Program name')] = None
3810
+ description: Annotated[str | None, Field(title='Program description')] = None
3784
3811
  app: Annotated[str, Field(title='The app containing the program.')]
3785
3812
  input_schema: Annotated[
3786
- Optional[Dict[str, Any]], Field(title='Program input json schema')
3813
+ dict[str, Any] | None, Field(title='Program input json schema')
3787
3814
  ] = None
3788
3815
  preconditions: Annotated[
3789
- Optional[Dict[str, Any]],
3816
+ dict[str, Any] | None,
3790
3817
  Field(title='Preconditions before the program can be started'),
3791
3818
  ] = None
3792
3819
 
@@ -3796,7 +3823,7 @@ class ProgramStartRequest(BaseModel):
3796
3823
  The state of a program run.
3797
3824
  """
3798
3825
 
3799
- arguments: Dict[str, Any]
3826
+ arguments: dict[str, Any]
3800
3827
  """
3801
3828
  The arguments to pass to the program.
3802
3829
  """
@@ -3827,7 +3854,7 @@ class ProgramRun(BaseModel):
3827
3854
  """
3828
3855
  Unique identifier of the program
3829
3856
  """
3830
- app: Annotated[Optional[str], Field(title='App Id')] = None
3857
+ app: Annotated[str | None, Field(title='App Id')] = None
3831
3858
  """
3832
3859
  Identifier of the app that produced the program run
3833
3860
  """
@@ -3835,35 +3862,35 @@ class ProgramRun(BaseModel):
3835
3862
  """
3836
3863
  State of the program run
3837
3864
  """
3838
- logs: Annotated[Optional[str], Field(title='Logs')] = None
3865
+ logs: Annotated[str | None, Field(title='Logs')] = None
3839
3866
  """
3840
3867
  Logs of the program run
3841
3868
  """
3842
- stdout: Annotated[Optional[str], Field(title='Stdout')] = None
3869
+ stdout: Annotated[str | None, Field(title='Stdout')] = None
3843
3870
  """
3844
3871
  Stdout of the program run
3845
3872
  """
3846
- stderr: Annotated[Optional[str], Field(title='Stderr')] = None
3873
+ stderr: Annotated[str | None, Field(title='Stderr')] = None
3847
3874
  """
3848
3875
  Stderr of the program run
3849
3876
  """
3850
- error: Annotated[Optional[str], Field(title='Error')] = None
3877
+ error: Annotated[str | None, Field(title='Error')] = None
3851
3878
  """
3852
3879
  Error message of the program run, if any
3853
3880
  """
3854
- traceback: Annotated[Optional[str], Field(title='Traceback')] = None
3881
+ traceback: Annotated[str | None, Field(title='Traceback')] = None
3855
3882
  """
3856
3883
  Traceback of the program run, if any
3857
3884
  """
3858
- start_time: Annotated[Optional[AwareDatetime], Field(title='Start Time')] = None
3885
+ start_time: Annotated[AwareDatetime | None, Field(title='Start Time')] = None
3859
3886
  """
3860
3887
  Start time of the program run in RFC3339 format
3861
3888
  """
3862
- end_time: Annotated[Optional[AwareDatetime], Field(title='End Time')] = None
3889
+ end_time: Annotated[AwareDatetime | None, Field(title='End Time')] = None
3863
3890
  """
3864
3891
  End time of the program run in RFC3339 format
3865
3892
  """
3866
- input_data: Annotated[Optional[Dict[str, Any]], Field(title='Input Data')] = None
3893
+ input_data: Annotated[dict[str, Any] | None, Field(title='Input Data')] = None
3867
3894
  """
3868
3895
  Input data of the program run
3869
3896
  """
@@ -3874,13 +3901,13 @@ class ValidationError2(BaseModel):
3874
3901
  A validation error of a program.
3875
3902
  """
3876
3903
 
3877
- loc: Annotated[List[int], Field(title='Location')]
3904
+ loc: Annotated[list[int], Field(title='Location')]
3878
3905
  msg: Annotated[str, Field(title='Message')]
3879
3906
  type: Annotated[str, Field(title='Error Type')]
3880
3907
 
3881
3908
 
3882
3909
  class HTTPValidationError(BaseModel):
3883
- detail: Annotated[Optional[List[ValidationError2]], Field(title='Detail')] = None
3910
+ detail: Annotated[list[ValidationError2] | None, Field(title='Detail')] = None
3884
3911
 
3885
3912
 
3886
3913
  class MotionGroupInfo(BaseModel):
@@ -3902,7 +3929,7 @@ class MotionGroupInfo(BaseModel):
3902
3929
 
3903
3930
 
3904
3931
  class MotionGroupInfos(RootModel):
3905
- root: List[MotionGroupInfo]
3932
+ root: list[MotionGroupInfo]
3906
3933
 
3907
3934
  def __getitem__(self, index: int) -> MotionGroupInfo:
3908
3935
  """
@@ -3935,22 +3962,22 @@ class MotionGroupJoints(BaseModel):
3935
3962
  Everything but positions is optional.
3936
3963
  """
3937
3964
 
3938
- positions: List[float]
3965
+ positions: list[float]
3939
3966
  """
3940
3967
  The joint positions of the motion group.
3941
3968
 
3942
3969
  """
3943
- velocities: Optional[List[float]] = None
3970
+ velocities: list[float] | None = None
3944
3971
  """
3945
3972
  The joint velocities of the motion group.
3946
3973
 
3947
3974
  """
3948
- accelerations: Optional[List[float]] = None
3975
+ accelerations: list[float] | None = None
3949
3976
  """
3950
3977
  The joint accelerations of the motion group.
3951
3978
 
3952
3979
  """
3953
- torques: Optional[List[float]] = None
3980
+ torques: list[float] | None = None
3954
3981
  """
3955
3982
  The joint torques of the motion group.
3956
3983
 
@@ -3958,13 +3985,13 @@ class MotionGroupJoints(BaseModel):
3958
3985
 
3959
3986
 
3960
3987
  class RobotTcpData(BaseModel):
3961
- name: Optional[str] = None
3988
+ name: str | None = None
3962
3989
  """
3963
3990
  A readable and changeable name for frontend visualization.
3964
3991
  """
3965
3992
  position: Vector3d
3966
- orientation: Optional[Orientation] = None
3967
- orientation_type: Optional[OrientationType] = 'ROTATION_VECTOR'
3993
+ orientation: Orientation | None = None
3994
+ orientation_type: OrientationType | None = 'ROTATION_VECTOR'
3968
3995
 
3969
3996
 
3970
3997
  class RobotTcp(RobotTcpData):
@@ -3976,7 +4003,7 @@ class RobotTcp(RobotTcpData):
3976
4003
 
3977
4004
  class RobotTcps(RootModel):
3978
4005
  root: Annotated[
3979
- List[RobotTcp],
4006
+ list[RobotTcp],
3980
4007
  Field(
3981
4008
  examples=[
3982
4009
  [
@@ -4082,7 +4109,7 @@ class ExternalJointStreamDatapoint(BaseModel):
4082
4109
 
4083
4110
 
4084
4111
  class ExternalJointStreamDatapoints(RootModel):
4085
- root: List[ExternalJointStreamDatapoint]
4112
+ root: list[ExternalJointStreamDatapoint]
4086
4113
 
4087
4114
  def __getitem__(self, index: int) -> ExternalJointStreamDatapoint:
4088
4115
  """
@@ -4128,7 +4155,7 @@ class MetadataObject(RootModel):
4128
4155
  A metadata object.
4129
4156
  """
4130
4157
 
4131
- root: Dict[str, str]
4158
+ root: dict[str, str]
4132
4159
 
4133
4160
 
4134
4161
  class BinaryObject(RootModel):
@@ -4151,13 +4178,13 @@ class BusIODescription(BaseModel):
4151
4178
  """
4152
4179
  direction: IODirection
4153
4180
  value_type: IOValueType
4154
- unit: Optional[UnitType] = None
4155
- min: Optional[IOBoundary] = None
4156
- max: Optional[IOBoundary] = None
4181
+ unit: UnitType | None = None
4182
+ min: IOBoundary | None = None
4183
+ max: IOBoundary | None = None
4157
4184
 
4158
4185
 
4159
4186
  class ListBusIODescriptionsResponse(RootModel):
4160
- root: List[BusIODescription]
4187
+ root: list[BusIODescription]
4161
4188
 
4162
4189
  def __getitem__(self, index: int) -> BusIODescription:
4163
4190
  """
@@ -4198,7 +4225,7 @@ class BusIOsStateEnum(Enum):
4198
4225
 
4199
4226
  class BusIOsState(BaseModel):
4200
4227
  state: BusIOsStateEnum
4201
- message: Optional[str] = None
4228
+ message: str | None = None
4202
4229
  """
4203
4230
  A message providing additional information on the input/output service, e.g., BUS service status, encountered errors.
4204
4231
  May be empty if no additional information is available.
@@ -4246,7 +4273,7 @@ class ProfinetSlotDescription(BaseModel):
4246
4273
  The API identifies the application relation (AR) that is using the slot.
4247
4274
 
4248
4275
  """
4249
- subslots: List[ProfinetSubSlotDescription]
4276
+ subslots: list[ProfinetSubSlotDescription]
4250
4277
  """
4251
4278
  An array of PROFINET subslots.
4252
4279
 
@@ -4264,14 +4291,14 @@ class ProfinetDescription(BaseModel):
4264
4291
  The device identifier of the PROFINET device, identifying the specific device within the vendor's range.
4265
4292
 
4266
4293
  """
4267
- slots: Optional[List[ProfinetSlotDescription]] = None
4268
- device_name: Annotated[Optional[str], Field(examples=['pnDevice'])] = None
4294
+ slots: list[ProfinetSlotDescription] | None = None
4295
+ device_name: Annotated[str | None, Field(examples=['pnDevice'])] = None
4269
4296
  """
4270
4297
  Name of Station (NoS) of the PROFINET device. The NoS is used in combination with IPv4 record to identify your device in the PROFINET network.
4271
4298
  The `device_name` will be used as NoS if no REMA XML file is already present on your NOVA instance and no `rema_xml_content` is provided.
4272
4299
 
4273
4300
  """
4274
- ip_config: Optional[BusIOProfinetIpConfig] = None
4301
+ ip_config: BusIOProfinetIpConfig | None = None
4275
4302
 
4276
4303
 
4277
4304
  class ProfinetIOTypeEnum(Enum):
@@ -4320,7 +4347,7 @@ class ProfinetIOData(BaseModel):
4320
4347
  The byte address is used to locate the specific input/output variable within the device's memory or data structure.
4321
4348
 
4322
4349
  """
4323
- bit_address: Annotated[Optional[int], Field(ge=0, le=7)] = None
4350
+ bit_address: Annotated[int | None, Field(ge=0, le=7)] = None
4324
4351
  """
4325
4352
  The bit address of the input/output variable within the byte or word address.
4326
4353
  The bit address is used to specify the exact bit within the byte or word that corresponds to the input/output variable.
@@ -4342,7 +4369,7 @@ class ProfinetIOs(RootModel):
4342
4369
  Array of PROFINET input/output variable configurations.
4343
4370
  """
4344
4371
 
4345
- root: List[ProfinetIO]
4372
+ root: list[ProfinetIO]
4346
4373
  """
4347
4374
  Array of PROFINET input/output variable configurations.
4348
4375
  """
@@ -4473,7 +4500,7 @@ class ModbusIOs(RootModel):
4473
4500
  Array of MODBUS input/output variable configurations.
4474
4501
  """
4475
4502
 
4476
- root: List[ModbusIO]
4503
+ root: list[ModbusIO]
4477
4504
  """
4478
4505
  Array of MODBUS input/output variable configurations.
4479
4506
  """
@@ -4520,7 +4547,7 @@ class ConfigurationResource(BaseModel):
4520
4547
  """
4521
4548
  Human-readable name of the configuration resource.
4522
4549
  """
4523
- children: Optional[ConfigurationResourceArray] = None
4550
+ children: ConfigurationResourceArray | None = None
4524
4551
 
4525
4552
 
4526
4553
  class ConfigurationResourceArray(RootModel):
@@ -4528,7 +4555,7 @@ class ConfigurationResourceArray(RootModel):
4528
4555
  Array of configuration resources.
4529
4556
  """
4530
4557
 
4531
- root: List[ConfigurationResource]
4558
+ root: list[ConfigurationResource]
4532
4559
  """
4533
4560
  Array of configuration resources.
4534
4561
  """