wandelbots-api-client 25.11.0.dev12__py3-none-any.whl → 26.1.0.dev62__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 (43) 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/models/__init__.py +3 -1
  6. wandelbots_api_client/models/virtual_controller_types.py +4 -4
  7. wandelbots_api_client/v2/__init__.py +1 -1
  8. wandelbots_api_client/v2/api/__init__.py +2 -0
  9. wandelbots_api_client/v2/api/bus_inputs_outputs_api.py +579 -0
  10. wandelbots_api_client/v2/api/jogging_api.py +1 -1
  11. wandelbots_api_client/v2/api/motion_group_models_api.py +795 -2
  12. wandelbots_api_client/v2/api/program_api.py +12 -12
  13. wandelbots_api_client/v2/api/robot_configurations_api.py +291 -0
  14. wandelbots_api_client/v2/api/trajectory_execution_api.py +1 -1
  15. wandelbots_api_client/v2/api_client.py +1 -1
  16. wandelbots_api_client/v2/configuration.py +1 -1
  17. wandelbots_api_client/v2/models/__init__.py +7 -3
  18. wandelbots_api_client/v2/models/blending_auto.py +1 -1
  19. wandelbots_api_client/v2/models/blending_position.py +15 -1
  20. wandelbots_api_client/v2/models/blending_space.py +37 -0
  21. wandelbots_api_client/v2/models/initialize_jogging_request.py +2 -4
  22. wandelbots_api_client/v2/models/inverse_kinematics_request.py +6 -4
  23. wandelbots_api_client/v2/models/kinematic_model.py +110 -0
  24. wandelbots_api_client/v2/models/motion_group_description.py +4 -2
  25. wandelbots_api_client/v2/models/virtual_controller.py +1 -2
  26. wandelbots_api_client/v2/models/virtual_controller_types.py +1 -1
  27. wandelbots_api_client/v2_pydantic/__init__.py +1 -1
  28. wandelbots_api_client/v2_pydantic/api/__init__.py +2 -0
  29. wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py +585 -0
  30. wandelbots_api_client/v2_pydantic/api/jogging_api.py +1 -1
  31. wandelbots_api_client/v2_pydantic/api/motion_group_models_api.py +804 -2
  32. wandelbots_api_client/v2_pydantic/api/program_api.py +12 -12
  33. wandelbots_api_client/v2_pydantic/api/robot_configurations_api.py +294 -0
  34. wandelbots_api_client/v2_pydantic/api/trajectory_execution_api.py +1 -1
  35. wandelbots_api_client/v2_pydantic/api_client.py +1 -1
  36. wandelbots_api_client/v2_pydantic/configuration.py +1 -1
  37. wandelbots_api_client/v2_pydantic/models.py +471 -527
  38. wandelbots_api_client/v2_pydantic/virtual_controller_types.py +126 -0
  39. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/METADATA +2 -2
  40. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/RECORD +43 -38
  41. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/WHEEL +0 -0
  42. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/licenses/LICENSE +0 -0
  43. {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,16 @@
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-15T11:45:23+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
+ from .virtual_controller_types import VirtualControllerTypes
13
14
 
14
15
 
15
16
  class NameList(RootModel):
@@ -17,7 +18,7 @@ class NameList(RootModel):
17
18
  A list of names
18
19
  """
19
20
 
20
- root: List[str]
21
+ root: list[str]
21
22
  """
22
23
  A list of names
23
24
  """
@@ -48,7 +49,7 @@ class NameList(RootModel):
48
49
 
49
50
 
50
51
  class CellName(RootModel):
51
- root: Annotated[str, Field(pattern='^[a-z][a-z0-9-]{0,30}[a-z0-9]$')]
52
+ root: Annotated[str, Field(pattern='^[a-z][a-z0-9-]{0,30}[a-z0-9]$')] = 'cell'
52
53
  """
53
54
  A unique name for the cell used as an identifier for addressing the cell in all API calls.
54
55
  It must be a valid k8s label name as defined by [RFC 1123](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names).
@@ -127,7 +128,7 @@ class KukaController(BaseModel):
127
128
  """
128
129
  The RSI server runs inside of the cell.
129
130
  """
130
- slow_cycle_rate: Optional[bool] = False
131
+ slow_cycle_rate: bool | None = False
131
132
  """
132
133
  If true, uses slower cycle time of 12ms instead of 4ms.
133
134
 
@@ -151,130 +152,6 @@ class Manufacturer(Enum):
151
152
  YASKAWA = 'yaskawa'
152
153
 
153
154
 
154
- class VirtualControllerTypes(Enum):
155
- ABB_IRB1010_037_15 = 'abb-irb1010_037_15'
156
- ABB_IRB1100_0475_4 = 'abb-irb1100_0475_4'
157
- ABB_IRB1100_058_4 = 'abb-irb1100_058_4'
158
- ABB_IRB1200_7 = 'abb-irb1200_7'
159
- ABB_IRB1300_09_11 = 'abb-irb1300_09_11'
160
- ABB_IRB1300_115_10 = 'abb-irb1300_115_10'
161
- ABB_IRB1300_14_12 = 'abb-irb1300_14_12'
162
- ABB_IRB1300_14_7 = 'abb-irb1300_14_7'
163
- ABB_IRB1600_12_10 = 'abb-irb1600_12_10'
164
- ABB_IRB1600_12_6 = 'abb-irb1600_12_6'
165
- ABB_IRB1600_145_10 = 'abb-irb1600_145_10'
166
- ABB_IRB1600_145_6 = 'abb-irb1600_145_6'
167
- ABB_IRB2600_ID_185_15 = 'abb-irb2600ID_185_15'
168
- ABB_IRB2600_ID_200_8 = 'abb-irb2600ID_200_8'
169
- ABB_IRB2600_165_12 = 'abb-irb2600_165_12'
170
- ABB_IRB2600_165_20 = 'abb-irb2600_165_20'
171
- ABB_IRB2600_185_12 = 'abb-irb2600_185_12'
172
- ABB_IRB4600_205_45 = 'abb-irb4600_205_45'
173
- ABB_IRB4600_205_60 = 'abb-irb4600_205_60'
174
- ABB_IRB4600_250_20 = 'abb-irb4600_250_20'
175
- ABB_IRB4600_255_40 = 'abb-irb4600_255_40'
176
- ABB_IRB6730_210_310 = 'abb-irb6730_210_310'
177
- ABB_IRB6730_240_290 = 'abb-irb6730_240_290'
178
- FANUC_ARC_MATE_100I_D = 'fanuc-arc_mate_100iD'
179
- FANUC_ARC_MATE_100I_D16_S = 'fanuc-arc_mate_100iD16S'
180
- FANUC_ARC_MATE_120I_D = 'fanuc-arc_mate_120iD'
181
- FANUC_ARC_MATE_120I_D12_L = 'fanuc-arc_mate_120iD12L'
182
- FANUC_ARC_MATE_120I_D35 = 'fanuc-arc_mate_120iD35'
183
- FANUC_CR35IB = 'fanuc-cr35ib'
184
- FANUC_CR7IA = 'fanuc-cr7ia'
185
- FANUC_CR7IAL = 'fanuc-cr7ial'
186
- FANUC_CRX10IA = 'fanuc-crx10ia'
187
- FANUC_CRX10IAL = 'fanuc-crx10ial'
188
- FANUC_CRX20IAL = 'fanuc-crx20ial'
189
- FANUC_CRX25IA = 'fanuc-crx25ia'
190
- FANUC_CRX30IA = 'fanuc-crx30ia'
191
- FANUC_CRX5IA = 'fanuc-crx5ia'
192
- FANUC_LR_MATE_200I_D = 'fanuc-lr_mate_200iD'
193
- FANUC_LR_MATE_200I_D4_S = 'fanuc-lr_mate_200iD4S'
194
- FANUC_LR_MATE_200I_D7_L = 'fanuc-lr_mate_200iD7L'
195
- FANUC_M10I_D12 = 'fanuc-m10iD12'
196
- FANUC_M10I_D16_S = 'fanuc-m10iD16S'
197
- FANUC_M20I_D25 = 'fanuc-m20iD25'
198
- FANUC_M20I_D35 = 'fanuc-m20iD35'
199
- FANUC_M710I_C20_L = 'fanuc-m710iC20L'
200
- FANUC_M900I_B280_L = 'fanuc-m900iB280L'
201
- FANUC_M900I_B360_E = 'fanuc-m900iB360E'
202
- FANUC_R2000IC125L = 'fanuc-r2000ic125l'
203
- FANUC_R2000IC210F = 'fanuc-r2000ic210f'
204
- KUKA_KR10_R1100 = 'kuka-kr10_r1100'
205
- KUKA_KR10_R1100_2 = 'kuka-kr10_r1100_2'
206
- KUKA_KR10_R900 = 'kuka-kr10_r900'
207
- KUKA_KR10_R900_2 = 'kuka-kr10_r900_2'
208
- KUKA_KR120_R2700_2 = 'kuka-kr120_r2700_2'
209
- KUKA_KR12_R1810_2 = 'kuka-kr12_r1810_2'
210
- KUKA_KR150_R2 = 'kuka-kr150_r2'
211
- KUKA_KR16_R1610_2 = 'kuka-kr16_r1610_2'
212
- KUKA_KR16_R2010_2 = 'kuka-kr16_r2010_2'
213
- KUKA_KR20_R1810 = 'kuka-kr20_r1810'
214
- KUKA_KR20_R1810_2 = 'kuka-kr20_r1810_2'
215
- KUKA_KR120_R3100_2 = 'kuka-kr120_r3100_2'
216
- KUKA_KR120_R3900_2_K = 'kuka-kr120_r3900_2_k'
217
- KUKA_KR210_R2700_EXTRA = 'kuka-kr210_r2700_extra'
218
- KUKA_KR210_R2700_2 = 'kuka-kr210_r2700_2'
219
- KUKA_KR210_R3100_2 = 'kuka-kr210_r3100_2'
220
- KUKA_KR210_R3300_2 = 'kuka-kr210_r3300_2'
221
- KUKA_KR240_R2700 = 'kuka-kr240_r2700'
222
- KUKA_KR240_R2900 = 'kuka-kr240_r2900'
223
- KUKA_KR240_R3700_2 = 'kuka-kr240_r3700_2'
224
- KUKA_KR250_R2700_2 = 'kuka-kr250_r2700_2'
225
- KUKA_KR270_R2700 = 'kuka-kr270_r2700'
226
- KUKA_KR30_R2100 = 'kuka-kr30_r2100'
227
- KUKA_KR30_R3 = 'kuka-kr30_r3'
228
- KUKA_KR360_L240_3 = 'kuka-kr360_l240_3'
229
- KUKA_KR3_R540 = 'kuka-kr3_r540'
230
- KUKA_KR4_R600 = 'kuka-kr4_r600'
231
- KUKA_KR500_L340_3 = 'kuka-kr500_l340_3'
232
- KUKA_KR50_R2500 = 'kuka-kr50_r2500'
233
- KUKA_KR60_R3 = 'kuka-kr60_r3'
234
- KUKA_KR6_R1820 = 'kuka-kr6_r1820'
235
- KUKA_KR6_R700_2 = 'kuka-kr6_r700_2'
236
- KUKA_KR6_R700_SIXX = 'kuka-kr6_r700_sixx'
237
- KUKA_KR6_R900 = 'kuka-kr6_r900'
238
- KUKA_KR6_R900_2 = 'kuka-kr6_r900_2'
239
- KUKA_KR70_R2100 = 'kuka-kr70_r2100'
240
- KUKA_LBR_IISY_11_R1300 = 'kuka-lbr_iisy_11_r1300'
241
- UNIVERSALROBOTS_UR10CB = 'universalrobots-ur10cb'
242
- UNIVERSALROBOTS_UR10E = 'universalrobots-ur10e'
243
- UNIVERSALROBOTS_UR12E = 'universalrobots-ur12e'
244
- UNIVERSALROBOTS_UR16E = 'universalrobots-ur16e'
245
- UNIVERSALROBOTS_UR20E = 'universalrobots-ur20e'
246
- UNIVERSALROBOTS_UR3E = 'universalrobots-ur3e'
247
- UNIVERSALROBOTS_UR5CB = 'universalrobots-ur5cb'
248
- UNIVERSALROBOTS_UR5E = 'universalrobots-ur5e'
249
- UNIVERSALROBOTS_UR7E = 'universalrobots-ur7e'
250
- YASKAWA_AR1440 = 'yaskawa-ar1440'
251
- YASKAWA_AR1730 = 'yaskawa-ar1730'
252
- YASKAWA_AR2010 = 'yaskawa-ar2010'
253
- YASKAWA_AR3120 = 'yaskawa-ar3120'
254
- YASKAWA_AR700 = 'yaskawa-ar700'
255
- YASKAWA_AR900 = 'yaskawa-ar900'
256
- YASKAWA_GP110 = 'yaskawa-gp110'
257
- YASKAWA_GP12 = 'yaskawa-gp12'
258
- YASKAWA_GP180 = 'yaskawa-gp180'
259
- YASKAWA_GP180_120 = 'yaskawa-gp180-120'
260
- YASKAWA_GP20HL = 'yaskawa-gp20hl'
261
- YASKAWA_GP215 = 'yaskawa-gp215'
262
- YASKAWA_GP225 = 'yaskawa-gp225'
263
- YASKAWA_GP25 = 'yaskawa-gp25'
264
- YASKAWA_GP250 = 'yaskawa-gp250'
265
- YASKAWA_GP25_12 = 'yaskawa-gp25_12'
266
- YASKAWA_GP280 = 'yaskawa-gp280'
267
- YASKAWA_GP35_L = 'yaskawa-gp35L'
268
- YASKAWA_GP400 = 'yaskawa-gp400'
269
- YASKAWA_GP50 = 'yaskawa-gp50'
270
- YASKAWA_GP600 = 'yaskawa-gp600'
271
- YASKAWA_GP7 = 'yaskawa-gp7'
272
- YASKAWA_GP8 = 'yaskawa-gp8'
273
- YASKAWA_GP88 = 'yaskawa-gp88'
274
- YASKAWA_HC10DTP = 'yaskawa-hc10dtp'
275
- YASKAWA_HC20DTP = 'yaskawa-hc20dtp'
276
-
277
-
278
155
  class VirtualController(BaseModel):
279
156
  """
280
157
  The configuration of a virtual robot controller has to contain the manufacturer string,
@@ -284,15 +161,40 @@ class VirtualController(BaseModel):
284
161
 
285
162
  kind: Literal['VirtualController'] = 'VirtualController'
286
163
  manufacturer: Manufacturer
287
- type: Optional[VirtualControllerTypes] = None
288
- json_: Annotated[Optional[str], Field(alias='json')] = None
164
+ type: Annotated[
165
+ str | None,
166
+ Field(
167
+ examples=[
168
+ 'abb-irb1200_7',
169
+ 'abb-irb1010_037_15',
170
+ 'abb-irb2600ID_200_8',
171
+ 'fanuc-arc_mate_120iD12L',
172
+ 'fanuc-crx10ial',
173
+ 'fanuc-lr_mate_200iD4S',
174
+ 'fanuc-r2000ic125l',
175
+ 'kuka-kr10_r1100_2',
176
+ 'kuka-kr210_r2700_extra',
177
+ 'kuka-lbr_iisy_11_r1300',
178
+ 'universalrobots-ur10cb',
179
+ 'yaskawa-ar1440',
180
+ 'yaskawa-gp180-120',
181
+ 'yaskawa-hc20dtp',
182
+ ]
183
+ ),
184
+ ] = None
185
+ """
186
+ Preset type of the virtual robot controller.
187
+ See [getRobotConfigurations](getRobotConfigurations) for supported types.
188
+
189
+ """
190
+ json_: Annotated[str | None, Field(alias='json')] = None
289
191
  """
290
192
  Complete JSON configuration of the virtual robot controller.
291
193
  Can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](getVirtualControllerConfiguration).
292
194
  If provided, the `type` field should not be used.
293
195
 
294
196
  """
295
- initial_joint_position: Optional[str] = None
197
+ initial_joint_position: str | None = None
296
198
  """
297
199
  Initial joint position of the first motion group from the virtual robot controller.
298
200
  Provide the joint position as a JSON array containing 7 float values,
@@ -323,14 +225,12 @@ class RobotController(BaseModel):
323
225
 
324
226
  """
325
227
  configuration: Annotated[
326
- Union[
327
- AbbController,
328
- FanucController,
329
- KukaController,
330
- UniversalrobotsController,
331
- VirtualController,
332
- YaskawaController,
333
- ],
228
+ AbbController
229
+ | FanucController
230
+ | KukaController
231
+ | UniversalrobotsController
232
+ | VirtualController
233
+ | YaskawaController,
334
234
  Field(discriminator='kind'),
335
235
  ]
336
236
 
@@ -360,8 +260,8 @@ class ContainerImage(BaseModel):
360
260
  """
361
261
  The location of a container image in the form of `<registry>/<image>:<tag>`.
362
262
  """
363
- credentials: Optional[ImageCredentials] = None
364
- secrets: Optional[List[Secret]] = None
263
+ credentials: ImageCredentials | None = None
264
+ secrets: list[Secret] | None = None
365
265
  """
366
266
  Known secrets for authentication with the container registry.
367
267
  """
@@ -379,7 +279,7 @@ class ContainerEnvironment(RootModel):
379
279
 
380
280
  """
381
281
 
382
- root: List[ContainerEnvironmentItem]
282
+ root: list[ContainerEnvironmentItem]
383
283
  """
384
284
  A list of environment variables with name and their value.
385
285
  These can be used to configure the containerized application, and turn features on or off.
@@ -446,11 +346,11 @@ class ContainerResources(BaseModel):
446
346
  Additional resources that the application requires.
447
347
  """
448
348
 
449
- intel_gpu: Annotated[Optional[int], Field(ge=0, le=1)] = None
349
+ intel_gpu: Annotated[int | None, Field(ge=0, le=1)] = None
450
350
  """
451
351
  Number of GPUs the application requires.
452
352
  """
453
- memory_limit: Annotated[Optional[str], Field(examples=['1000Mi'])] = None
353
+ memory_limit: Annotated[str | None, Field(examples=['1000Mi'])] = None
454
354
  """
455
355
  The maximum memory allocated to this application.
456
356
  """
@@ -478,14 +378,14 @@ class App(BaseModel):
478
378
  The path of the icon for the App (/$cell/$name/$app_icon).
479
379
  """
480
380
  container_image: ContainerImage
481
- port: Optional[int] = 8080
381
+ port: int | None = 8080
482
382
  """
483
383
  The port the containerized webserver is listening on.
484
384
  """
485
- environment: Optional[ContainerEnvironment] = None
486
- storage: Optional[ContainerStorage] = None
487
- resources: Optional[ContainerResources] = None
488
- health_path: Optional[str] = None
385
+ environment: ContainerEnvironment | None = None
386
+ storage: ContainerStorage | None = None
387
+ resources: ContainerResources | None = None
388
+ health_path: str | None = None
489
389
  """
490
390
  Defines the URL path suffix used to check the application's health status. The complete health check URL
491
391
  is constructed as `/$cell/$name/$health_path`. When the application is working as expected,
@@ -498,7 +398,7 @@ class App(BaseModel):
498
398
  automatically restart the application container to restore service.
499
399
 
500
400
  """
501
- diagnosis_path: Optional[str] = None
401
+ diagnosis_path: str | None = None
502
402
  """
503
403
  Defines the URL path suffix used to provide an endpoint for diagnosis data collection.
504
404
  The complete diagnosis check URL is constructed as `/$cell/$name/$diagnosis_path`.
@@ -517,14 +417,14 @@ class Cell(BaseModel):
517
417
 
518
418
  """
519
419
 
520
- name: CellName
521
- description: Optional[CellDescription] = None
522
- controllers: Optional[List[RobotController]] = None
523
- apps: Optional[List[App]] = None
420
+ name: Annotated[CellName, Field(default_factory=lambda: CellName('cell'))]
421
+ description: CellDescription | None = None
422
+ controllers: list[RobotController] | None = None
423
+ apps: list[App] | None = None
524
424
 
525
425
 
526
426
  class Error(BaseModel):
527
- code: Optional[str] = None
427
+ code: str | None = None
528
428
  message: str
529
429
 
530
430
 
@@ -570,7 +470,7 @@ class ServiceStatusPhase(Enum):
570
470
  class Status(BaseModel):
571
471
  severity: ServiceStatusSeverity
572
472
  code: ServiceStatusPhase
573
- reason: Optional[str] = None
473
+ reason: str | None = None
574
474
 
575
475
 
576
476
  class ServiceStatus(BaseModel):
@@ -580,7 +480,7 @@ class ServiceStatus(BaseModel):
580
480
 
581
481
 
582
482
  class ServiceStatusList(RootModel):
583
- root: List[ServiceStatus]
483
+ root: list[ServiceStatus]
584
484
 
585
485
  def __getitem__(self, index: int) -> ServiceStatus:
586
486
  """
@@ -644,14 +544,14 @@ class BusIOProfinetIpConfig(BaseModel):
644
544
 
645
545
 
646
546
  class BusIOProfinetNetwork(BaseModel):
647
- device_name: Annotated[Optional[str], Field(examples=['pnDevice'])] = None
547
+ device_name: Annotated[str | None, Field(examples=['pnDevice'])] = None
648
548
  """
649
549
  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
550
  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
551
 
652
552
  """
653
- ip_config: Optional[BusIOProfinetIpConfig] = None
654
- rema_xml_content: Optional[str] = None
553
+ ip_config: BusIOProfinetIpConfig | None = None
554
+ rema_xml_content: str | None = None
655
555
  """
656
556
  Content of the PROFINET REMA XML file.
657
557
  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 +590,7 @@ class BusIOProfinet(BaseModel):
690
590
  """
691
591
 
692
592
  bus_type: Literal['profinet'] = 'profinet'
693
- network_config: Optional[BusIOProfinetNetwork] = None
593
+ network_config: BusIOProfinetNetwork | None = None
694
594
  """
695
595
  Used to enable IP communication through the same physical ethernet interface while PROFINET driver is active.
696
596
 
@@ -709,7 +609,9 @@ class BusIOProfinet(BaseModel):
709
609
  MAC address of the physical ethernet interface that you want to use for PROFINET communication.
710
610
 
711
611
  """
712
- default_route: Optional[BusIOProfinetDefaultRoute] = None
612
+ default_route: Annotated[
613
+ BusIOProfinetDefaultRoute | None, Field(deprecated=True)
614
+ ] = None
713
615
 
714
616
 
715
617
  class BusIOProfinetVirtual(BaseModel):
@@ -722,7 +624,7 @@ class BusIOProfinetVirtual(BaseModel):
722
624
 
723
625
 
724
626
  class BusIOModbusTCPServer(BaseModel):
725
- network_type: Optional[Literal['tcp']] = None
627
+ network_type: Literal['tcp'] | None = None
726
628
  port: Annotated[int, Field(examples=[502], ge=1, le=65534)]
727
629
  """
728
630
  Port number of the MODBUS server to establish communication with.
@@ -766,7 +668,7 @@ class BusIOModbusServer(BaseModel):
766
668
 
767
669
 
768
670
  class BusIOModbusTCPClient(BaseModel):
769
- network_type: Optional[Literal['tcp']] = None
671
+ network_type: Literal['tcp'] | None = None
770
672
  ip: Annotated[str, Field(examples=['192.168.1.100'])]
771
673
  """
772
674
  IP address of the MODBUS server to establish communication with.
@@ -800,13 +702,11 @@ class BusIOModbusVirtual(BaseModel):
800
702
 
801
703
  class BusIOType(RootModel):
802
704
  root: Annotated[
803
- Union[
804
- BusIOProfinet,
805
- BusIOProfinetVirtual,
806
- BusIOModbusServer,
807
- BusIOModbusClient,
808
- BusIOModbusVirtual,
809
- ],
705
+ BusIOProfinet
706
+ | BusIOProfinetVirtual
707
+ | BusIOModbusServer
708
+ | BusIOModbusClient
709
+ | BusIOModbusVirtual,
810
710
  Field(discriminator='bus_type'),
811
711
  ]
812
712
 
@@ -845,7 +745,7 @@ class Metadata(RootModel):
845
745
  Additional metadata to add to the backup
846
746
  """
847
747
 
848
- root: Dict[str, str]
748
+ root: dict[str, str]
849
749
 
850
750
 
851
751
  class ConfigurationArchive(RootModel):
@@ -883,11 +783,9 @@ class ConfigurationArchiveStatusSuccess(BaseModel):
883
783
 
884
784
  class ConfigurationArchiveStatus(RootModel):
885
785
  root: Annotated[
886
- Union[
887
- ConfigurationArchiveStatusCreating,
888
- ConfigurationArchiveStatusError,
889
- ConfigurationArchiveStatusSuccess,
890
- ],
786
+ ConfigurationArchiveStatusCreating
787
+ | ConfigurationArchiveStatusError
788
+ | ConfigurationArchiveStatusSuccess,
891
789
  Field(discriminator='status'),
892
790
  ]
893
791
  """
@@ -925,7 +823,7 @@ class License(BaseModel):
925
823
  """
926
824
  Identification key of the license.
927
825
  """
928
- license_expiry_date: Optional[date] = None
826
+ license_expiry_date: date | None = None
929
827
  """
930
828
  Expiration date of the license.
931
829
  """
@@ -941,11 +839,11 @@ class License(BaseModel):
941
839
  """
942
840
  Amount of times the license can be activated.
943
841
  """
944
- feature_limitations: Optional[Dict[str, int]] = None
842
+ feature_limitations: dict[str, int] | None = None
945
843
  """
946
844
  Feature limitations of the license.
947
845
  """
948
- feature_flags: Optional[List[str]] = None
846
+ feature_flags: list[str] | None = None
949
847
  """
950
848
  Features enabled by a license.
951
849
  """
@@ -1101,7 +999,7 @@ class Vector3d(RootModel):
1101
999
 
1102
1000
  """
1103
1001
 
1104
- root: Annotated[List[float], Field(max_length=3, min_length=3, title='Vector3d')]
1002
+ root: Annotated[list[float], Field(max_length=3, min_length=3, title='Vector3d')]
1105
1003
  """
1106
1004
  A three-dimensional vector [x, y, z] with double precision.
1107
1005
 
@@ -1138,7 +1036,7 @@ class ConvexHull(BaseModel):
1138
1036
  """
1139
1037
 
1140
1038
  shape_type: Literal['convex_hull'] = 'convex_hull'
1141
- vertices: List[Vector3d]
1039
+ vertices: list[Vector3d]
1142
1040
  """
1143
1041
  The list of encapsulated points.
1144
1042
  """
@@ -1154,7 +1052,7 @@ class RotationVector(RootModel):
1154
1052
  """
1155
1053
 
1156
1054
  root: Annotated[
1157
- List[float], Field(max_length=3, min_length=3, title='RotationVector')
1055
+ list[float], Field(max_length=3, min_length=3, title='RotationVector')
1158
1056
  ]
1159
1057
  """
1160
1058
  Defines a rotation in 3D space.
@@ -1197,8 +1095,8 @@ class Pose(BaseModel):
1197
1095
 
1198
1096
  """
1199
1097
 
1200
- position: Optional[Vector3d] = None
1201
- orientation: Optional[RotationVector] = None
1098
+ position: Vector3d | None = None
1099
+ orientation: RotationVector | None = None
1202
1100
 
1203
1101
 
1204
1102
  class Collider(BaseModel):
@@ -1216,27 +1114,25 @@ class Collider(BaseModel):
1216
1114
  """
1217
1115
 
1218
1116
  shape: Annotated[
1219
- Union[
1220
- Sphere,
1221
- Box,
1222
- Rectangle,
1223
- Plane,
1224
- Cylinder,
1225
- Capsule,
1226
- RectangularCapsule,
1227
- ConvexHull,
1228
- ],
1117
+ Sphere
1118
+ | Box
1119
+ | Rectangle
1120
+ | Plane
1121
+ | Cylinder
1122
+ | Capsule
1123
+ | RectangularCapsule
1124
+ | ConvexHull,
1229
1125
  Field(discriminator='shape_type'),
1230
1126
  ]
1231
- pose: Optional[Pose] = None
1232
- margin: Optional[float] = 0
1127
+ pose: Pose | None = None
1128
+ margin: float | None = 0
1233
1129
  """
1234
1130
  Increases the shape's size in all dimensions. Applied in [mm]. Can be used to keep a safe distance to the shape.
1235
1131
  """
1236
1132
 
1237
1133
 
1238
1134
  class Link(RootModel):
1239
- root: Dict[str, Collider]
1135
+ root: dict[str, Collider]
1240
1136
 
1241
1137
 
1242
1138
  class LinkChain(RootModel):
@@ -1257,7 +1153,7 @@ class LinkChain(RootModel):
1257
1153
  """
1258
1154
 
1259
1155
  root: Annotated[
1260
- List[Link],
1156
+ list[Link],
1261
1157
  Field(
1262
1158
  examples=[
1263
1159
  [
@@ -1330,12 +1226,51 @@ class LinkChain(RootModel):
1330
1226
  return iter(self.root)
1331
1227
 
1332
1228
 
1229
+ class DHParameter(BaseModel):
1230
+ """
1231
+ A single set of DH parameters.
1232
+ """
1233
+
1234
+ alpha: float | None = None
1235
+ """
1236
+ Angle about x-axis in [rad].
1237
+ """
1238
+ theta: float | None = None
1239
+ """
1240
+ Angle about z-axis in [rad].
1241
+ """
1242
+ a: float | None = None
1243
+ """
1244
+ Offset along x-axis in [mm].
1245
+ """
1246
+ d: float | None = None
1247
+ """
1248
+ Offset along z-axis in [mm].
1249
+ """
1250
+ reverse_rotation_direction: bool | None = None
1251
+ """
1252
+ True, if rotation direction of joint is reversed.
1253
+ """
1254
+
1255
+
1256
+ class KinematicModel(BaseModel):
1257
+ """
1258
+ Kinematics model described by Denavit-Hartenberg parameters.
1259
+ """
1260
+
1261
+ dh_parameters: list[DHParameter] | None = None
1262
+ inverse_solver: str | None = None
1263
+ """
1264
+ Optional name of the inverse kinematics solver.
1265
+ """
1266
+
1267
+
1333
1268
  class ControllerDescription(BaseModel):
1334
1269
  """
1335
1270
  The data type to describe a robot controller.
1336
1271
  """
1337
1272
 
1338
- connected_motion_groups: List[str]
1273
+ connected_motion_groups: list[str]
1339
1274
  supports_freedrive: bool
1340
1275
  """
1341
1276
  Can this controller be moved through freedrive (true), or not (false).
@@ -1462,7 +1397,7 @@ class Joints(RootModel):
1462
1397
 
1463
1398
  """
1464
1399
 
1465
- root: List[float]
1400
+ root: list[float]
1466
1401
  """
1467
1402
  This structure describes a set of joint values, e.g., positions, currents, torques, of a motion group.
1468
1403
 
@@ -1502,7 +1437,7 @@ class MotionGroupStateJointLimitReached(BaseModel):
1502
1437
 
1503
1438
  """
1504
1439
 
1505
- limit_reached: List[bool]
1440
+ limit_reached: list[bool]
1506
1441
  """
1507
1442
  If true, operational (soft) jointLimit is reached for specific joint.
1508
1443
  """
@@ -1546,7 +1481,7 @@ class JoggingPausedNearJointLimit(BaseModel):
1546
1481
  """
1547
1482
 
1548
1483
  kind: Literal['PAUSED_NEAR_JOINT_LIMIT'] = 'PAUSED_NEAR_JOINT_LIMIT'
1549
- joint_indices: List[JointIndice]
1484
+ joint_indices: list[JointIndice]
1550
1485
 
1551
1486
 
1552
1487
  class JoggingPausedNearCollision(BaseModel):
@@ -1573,13 +1508,11 @@ class JoggingDetails(BaseModel):
1573
1508
  """
1574
1509
 
1575
1510
  state: Annotated[
1576
- Union[
1577
- JoggingRunning,
1578
- JoggingPausedByUser,
1579
- JoggingPausedOnIO,
1580
- JoggingPausedNearJointLimit,
1581
- JoggingPausedNearCollision,
1582
- ],
1511
+ JoggingRunning
1512
+ | JoggingPausedByUser
1513
+ | JoggingPausedOnIO
1514
+ | JoggingPausedNearJointLimit
1515
+ | JoggingPausedNearCollision,
1583
1516
  Field(discriminator='kind'),
1584
1517
  ]
1585
1518
  kind: Literal['JOGGING'] = 'JOGGING'
@@ -1670,13 +1603,11 @@ class TrajectoryDetails(BaseModel):
1670
1603
  """
1671
1604
  location: Location
1672
1605
  state: Annotated[
1673
- Union[
1674
- TrajectoryRunning,
1675
- TrajectoryPausedByUser,
1676
- TrajectoryEnded,
1677
- TrajectoryWaitForIO,
1678
- TrajectoryPausedOnIO,
1679
- ],
1606
+ TrajectoryRunning
1607
+ | TrajectoryPausedByUser
1608
+ | TrajectoryEnded
1609
+ | TrajectoryWaitForIO
1610
+ | TrajectoryPausedOnIO,
1680
1611
  Field(discriminator='kind'),
1681
1612
  ]
1682
1613
  kind: Literal['TRAJECTORY'] = 'TRAJECTORY'
@@ -1694,13 +1625,13 @@ class Execute(BaseModel):
1694
1625
 
1695
1626
  """
1696
1627
 
1697
- joint_position: List[float]
1628
+ joint_position: list[float]
1698
1629
  """
1699
1630
  Commanded joint position of each joint in [rad]. This command was sent in the time step the corresponding state was received.
1700
1631
 
1701
1632
  """
1702
1633
  details: Annotated[
1703
- Optional[Union[JoggingDetails, TrajectoryDetails]], Field(discriminator='kind')
1634
+ JoggingDetails | TrajectoryDetails | None, Field(discriminator='kind')
1704
1635
  ] = None
1705
1636
 
1706
1637
 
@@ -1737,19 +1668,19 @@ class MotionGroupState(BaseModel):
1737
1668
  Indicates whether the joint is in a limit for all joints of the motion group.
1738
1669
 
1739
1670
  """
1740
- joint_torque: Optional[Joints] = None
1671
+ joint_torque: Joints | None = None
1741
1672
  """
1742
1673
  Current joint torque of each joint in [Nm].
1743
1674
  Is only available if the robot controller supports it, e.g., available for UR controllers.
1744
1675
 
1745
1676
  """
1746
- joint_current: Optional[Joints] = None
1677
+ joint_current: Joints | None = None
1747
1678
  """
1748
1679
  Current at TCP in [A].
1749
1680
  Is only available if the robot controller supports it, e.g., available for UR controllers.
1750
1681
 
1751
1682
  """
1752
- flange_pose: Optional[Pose] = None
1683
+ flange_pose: Pose | None = None
1753
1684
  """
1754
1685
  Pose of the flange.
1755
1686
  Positions are in [mm].
@@ -1758,13 +1689,13 @@ class MotionGroupState(BaseModel):
1758
1689
  For robot arms a flange pose is always returned, for positioners the flange might not be available, depending on the model.
1759
1690
 
1760
1691
  """
1761
- tcp: Optional[str] = None
1692
+ tcp: str | None = None
1762
1693
  """
1763
1694
  Unique identifier addressing the active TCP.
1764
1695
  Might not be returned for positioners as some do not support TCPs, depending on the model.
1765
1696
 
1766
1697
  """
1767
- tcp_pose: Optional[Pose] = None
1698
+ tcp_pose: Pose | None = None
1768
1699
  """
1769
1700
  Pose of the TCP selected on the robot control panel.
1770
1701
  Positions are in [mm].
@@ -1773,14 +1704,14 @@ class MotionGroupState(BaseModel):
1773
1704
  Might not be returned for positioners as some do not support TCPs, depending on the model.
1774
1705
 
1775
1706
  """
1776
- coordinate_system: Optional[str] = None
1707
+ coordinate_system: str | None = None
1777
1708
  """
1778
1709
  Unique identifier addressing the reference coordinate system of the cartesian data.
1779
1710
  Might not be returned for positioners as some do not support TCPs, depending on the model.
1780
1711
  Default: world coordinate system of corresponding controller.
1781
1712
 
1782
1713
  """
1783
- payload: Optional[str] = None
1714
+ payload: str | None = None
1784
1715
  """
1785
1716
  Unique identifier addressing the active payload.
1786
1717
  Only fetchable via GET endpoint, not available in WebSocket.
@@ -1792,7 +1723,7 @@ class MotionGroupState(BaseModel):
1792
1723
  Convenience: Signals that NOVA treats measured joint velocities as 0.
1793
1724
 
1794
1725
  """
1795
- execute: Optional[Execute] = None
1726
+ execute: Execute | None = None
1796
1727
  """
1797
1728
  Data that was commanded to the motion group. Includes additional data on NOVA's execution components for executing trajectories and jogging.
1798
1729
  This is a convenience field to indicate the last command sent to the motion group.
@@ -1810,7 +1741,7 @@ class RobotControllerState(BaseModel):
1810
1741
  """
1811
1742
  Mode of communication and control between NOVA and the robot controller.
1812
1743
  """
1813
- last_error: Optional[List[str]] = None
1744
+ last_error: list[str] | None = None
1814
1745
  """
1815
1746
  Last error stack encountered during initialization process or after a controller disconnect.
1816
1747
  At this stage, it's unclear whether the error is fatal.
@@ -1837,14 +1768,14 @@ class RobotControllerState(BaseModel):
1837
1768
  """
1838
1769
  operation_mode: OperationMode
1839
1770
  safety_state: SafetyStateType
1840
- velocity_override: Annotated[Optional[int], Field(ge=1, le=100)] = None
1771
+ velocity_override: Annotated[int | None, Field(ge=1, le=100)] = None
1841
1772
  """
1842
1773
  If made available by the robot controller, returns the current velocity override in
1843
1774
  [percentage] for movements adjusted on robot control panel.
1844
1775
  Valid value range: 1 - 100.
1845
1776
 
1846
1777
  """
1847
- motion_groups: Annotated[List[MotionGroupState], Field(title='MotionGroupState[]')]
1778
+ motion_groups: Annotated[list[MotionGroupState], Field(title='MotionGroupState[]')]
1848
1779
  """
1849
1780
  State of indicated motion groups.
1850
1781
  In case of state request via controller all configured motion groups are returned.
@@ -1924,7 +1855,7 @@ class FloatValue(BaseModel):
1924
1855
 
1925
1856
  class IOBoundary(RootModel):
1926
1857
  root: Annotated[
1927
- Union[BooleanValue, IntegerValue, FloatValue],
1858
+ BooleanValue | IntegerValue | FloatValue,
1928
1859
  Field(discriminator='value_type', title='IOBoundary'),
1929
1860
  ]
1930
1861
 
@@ -1940,20 +1871,20 @@ class IODescription(BaseModel):
1940
1871
  Name of the input/output. Customize it on the physical controller or in the virtual robot specification.
1941
1872
 
1942
1873
  """
1943
- group: Optional[str] = None
1874
+ group: str | None = None
1944
1875
  """
1945
1876
  Name of the input/output group. Customize it on the physical controller or in the virtual robot specification.
1946
1877
 
1947
1878
  """
1948
1879
  direction: IODirection
1949
1880
  value_type: IOValueType
1950
- unit: Optional[UnitType] = None
1951
- min: Optional[IOBoundary] = None
1952
- max: Optional[IOBoundary] = None
1881
+ unit: UnitType | None = None
1882
+ min: IOBoundary | None = None
1883
+ max: IOBoundary | None = None
1953
1884
 
1954
1885
 
1955
1886
  class ListIODescriptionsResponse(RootModel):
1956
- root: List[IODescription]
1887
+ root: list[IODescription]
1957
1888
 
1958
1889
  def __getitem__(self, index: int) -> IODescription:
1959
1890
  """
@@ -2029,7 +1960,7 @@ class IOFloatValue(BaseModel):
2029
1960
 
2030
1961
  class IOValue(RootModel):
2031
1962
  root: Annotated[
2032
- Union[IOBooleanValue, IOIntegerValue, IOFloatValue],
1963
+ IOBooleanValue | IOIntegerValue | IOFloatValue,
2033
1964
  Field(discriminator='value_type'),
2034
1965
  ]
2035
1966
 
@@ -2039,7 +1970,7 @@ class StreamIOValuesResponse(BaseModel):
2039
1970
  Array of input/output values.
2040
1971
  """
2041
1972
 
2042
- io_values: List[IOValue]
1973
+ io_values: list[IOValue]
2043
1974
  timestamp: AwareDatetime
2044
1975
  """
2045
1976
  Timestamp indicating when the represented information was received from the robot controller.
@@ -2058,7 +1989,7 @@ class ListIOValuesResponse(RootModel):
2058
1989
  """
2059
1990
 
2060
1991
  root: Annotated[
2061
- List[IOValue],
1992
+ list[IOValue],
2062
1993
  Field(
2063
1994
  examples=[
2064
1995
  {
@@ -2211,7 +2142,7 @@ class Orientation(RootModel):
2211
2142
 
2212
2143
  """
2213
2144
 
2214
- root: Annotated[List[float], Field(max_length=4, min_length=3, title='Orientation')]
2145
+ root: Annotated[list[float], Field(max_length=4, min_length=3, title='Orientation')]
2215
2146
  """
2216
2147
  Describes an orientation in 3D space.
2217
2148
  A tree-to-four-dimensional vector [x, y, z, w] with double precision.
@@ -2244,17 +2175,17 @@ class Orientation(RootModel):
2244
2175
 
2245
2176
 
2246
2177
  class CoordinateSystemData(BaseModel):
2247
- name: Optional[str] = None
2178
+ name: str | None = None
2248
2179
  """
2249
2180
  Human readable name of this coordinate system.
2250
2181
  """
2251
- reference_coordinate_system: Optional[str] = None
2182
+ reference_coordinate_system: str | None = None
2252
2183
  """
2253
2184
  The identifier of the reference coordinate system. Empty if world is used.
2254
2185
  """
2255
- position: Optional[Vector3d] = None
2256
- orientation: Optional[Orientation] = None
2257
- orientation_type: Optional[OrientationType] = 'ROTATION_VECTOR'
2186
+ position: Vector3d | None = None
2187
+ orientation: Orientation | None = None
2188
+ orientation_type: OrientationType | None = 'ROTATION_VECTOR'
2258
2189
 
2259
2190
 
2260
2191
  class CoordinateSystem(CoordinateSystemData):
@@ -2265,7 +2196,7 @@ class CoordinateSystem(CoordinateSystemData):
2265
2196
 
2266
2197
 
2267
2198
  class ListCoordinateSystemsResponse(RootModel):
2268
- root: List[CoordinateSystem]
2199
+ root: list[CoordinateSystem]
2269
2200
 
2270
2201
  def __getitem__(self, index: int) -> CoordinateSystem:
2271
2202
  """
@@ -2312,7 +2243,7 @@ class ColliderDictionary(RootModel):
2312
2243
  A collection of identifiable colliders.
2313
2244
  """
2314
2245
 
2315
- root: Dict[str, Collider]
2246
+ root: dict[str, Collider]
2316
2247
 
2317
2248
 
2318
2249
  class LimitRange(BaseModel):
@@ -2320,37 +2251,37 @@ class LimitRange(BaseModel):
2320
2251
  The upper_limit must be greater then the lower_limit.
2321
2252
  """
2322
2253
 
2323
- lower_limit: Optional[float] = None
2324
- upper_limit: Optional[float] = None
2254
+ lower_limit: float | None = None
2255
+ upper_limit: float | None = None
2325
2256
 
2326
2257
 
2327
2258
  class JointLimits(BaseModel):
2328
- position: Optional[LimitRange] = None
2329
- velocity: Optional[float] = None
2330
- acceleration: Optional[float] = None
2331
- torque: Optional[float] = None
2259
+ position: LimitRange | None = None
2260
+ velocity: float | None = None
2261
+ acceleration: float | None = None
2262
+ torque: float | None = None
2332
2263
 
2333
2264
 
2334
2265
  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
2266
+ velocity: float | None = None
2267
+ acceleration: float | None = None
2268
+ orientation_velocity: float | None = None
2269
+ orientation_acceleration: float | None = None
2339
2270
 
2340
2271
 
2341
2272
  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
2273
+ joints: list[JointLimits] | None = None
2274
+ tcp: CartesianLimits | None = None
2275
+ elbow: CartesianLimits | None = None
2276
+ flange: CartesianLimits | None = None
2277
+ coupled_shoulder_elbow_joint: JointLimits | None = None
2347
2278
 
2348
2279
 
2349
2280
  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
2281
+ auto_limits: LimitSet | None = None
2282
+ manual_limits: LimitSet | None = None
2283
+ manual_t1_limits: LimitSet | None = None
2284
+ manual_t2_limits: LimitSet | None = None
2354
2285
 
2355
2286
 
2356
2287
  class Payload(BaseModel):
@@ -2359,35 +2290,8 @@ class Payload(BaseModel):
2359
2290
  """
2360
2291
  Mass of payload in [kg].
2361
2292
  """
2362
- center_of_mass: Optional[Vector3d] = None
2363
- moment_of_inertia: Optional[Vector3d] = None
2364
-
2365
-
2366
- class DHParameter(BaseModel):
2367
- """
2368
- A single set of DH parameters.
2369
- """
2370
-
2371
- alpha: Optional[float] = None
2372
- """
2373
- Angle about x-axis in [rad].
2374
- """
2375
- theta: Optional[float] = None
2376
- """
2377
- Angle about z-axis in [rad].
2378
- """
2379
- a: Optional[float] = None
2380
- """
2381
- Offset along x-axis in [mm].
2382
- """
2383
- d: Optional[float] = None
2384
- """
2385
- Offset along z-axis in [mm].
2386
- """
2387
- reverse_rotation_direction: Optional[bool] = None
2388
- """
2389
- True, if rotation direction of joint is reversed.
2390
- """
2293
+ center_of_mass: Vector3d | None = None
2294
+ moment_of_inertia: Vector3d | None = None
2391
2295
 
2392
2296
 
2393
2297
  class MotionGroupDescription(BaseModel):
@@ -2396,30 +2300,30 @@ class MotionGroupDescription(BaseModel):
2396
2300
  """
2397
2301
 
2398
2302
  motion_group_model: MotionGroupModel
2399
- mounting: Optional[Pose] = None
2303
+ mounting: Pose | None = None
2400
2304
  """
2401
2305
  The offset from the world frame to the motion group base.
2402
2306
  """
2403
- tcps: Annotated[
2404
- Optional[Dict[str, TcpOffset]], Field(title='TcpOffsetDictionary')
2405
- ] = None
2307
+ tcps: Annotated[dict[str, TcpOffset] | None, Field(title='TcpOffsetDictionary')] = (
2308
+ None
2309
+ )
2406
2310
  """
2407
2311
  Maps a TCP name to its offset relative to the flange coordinate system. Key must be a TCP identifier.
2408
2312
  Values are TcpOffsets.
2409
2313
 
2410
2314
  """
2411
- safety_zones: Optional[ColliderDictionary] = None
2315
+ safety_zones: ColliderDictionary | None = None
2412
2316
  """
2413
2317
  SafetyZones are areas which cannot be entered or where certain limits apply.
2414
2318
  """
2415
- safety_link_colliders: Optional[List[ColliderDictionary]] = None
2319
+ safety_link_colliders: list[ColliderDictionary] | None = None
2416
2320
  """
2417
2321
  The shape of the MotionGroups links to validate against safety zones.
2418
2322
  Indexed along the kinematic chain, starting with a static base shape before first joint.
2419
2323
 
2420
2324
  """
2421
2325
  safety_tool_colliders: Annotated[
2422
- Optional[Dict[str, ColliderDictionary]], Field(title='SafetyToolColliders')
2326
+ dict[str, ColliderDictionary] | None, Field(title='SafetyToolColliders')
2423
2327
  ] = None
2424
2328
  """
2425
2329
  Maps a TCP name to its tool collider. Key must be a TCP identifier.
@@ -2427,22 +2331,27 @@ class MotionGroupDescription(BaseModel):
2427
2331
 
2428
2332
  """
2429
2333
  operation_limits: OperationLimits
2430
- payloads: Annotated[
2431
- Optional[Dict[str, Payload]], Field(title='PayloadDictionary')
2432
- ] = None
2334
+ payloads: Annotated[dict[str, Payload] | None, Field(title='PayloadDictionary')] = (
2335
+ None
2336
+ )
2433
2337
  """
2434
2338
  Maps a payload name to its configuration. Key must be a payload identifier.
2435
2339
  Values are payload objects.
2436
2340
 
2437
2341
  """
2438
- cycle_time: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2342
+ cycle_time: Annotated[int | None, Field(ge=0, le=2147483647)] = None
2439
2343
  """
2440
2344
  [ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.
2441
2345
  """
2442
- dh_parameters: Optional[List[DHParameter]] = None
2346
+ dh_parameters: list[DHParameter] | None = None
2443
2347
  """
2444
2348
  The DH parameters describing the motion group geometry, starting from base.
2445
2349
  """
2350
+ serial_number: str | None = None
2351
+ """
2352
+ The serial number of the motion group, if available. If not available, the serial number of the robot controller. If not available, empty.
2353
+
2354
+ """
2446
2355
 
2447
2356
 
2448
2357
  class Tool(RootModel):
@@ -2455,28 +2364,28 @@ class Tool(RootModel):
2455
2364
 
2456
2365
  """
2457
2366
 
2458
- root: Dict[str, Collider]
2367
+ root: dict[str, Collider]
2459
2368
 
2460
2369
 
2461
2370
  class CollisionSetup(BaseModel):
2462
- colliders: Optional[ColliderDictionary] = None
2371
+ colliders: ColliderDictionary | None = None
2463
2372
  """
2464
2373
  Colliders are checked against links and tool.
2465
2374
 
2466
2375
  """
2467
- link_chain: Optional[LinkChain] = None
2376
+ link_chain: LinkChain | None = None
2468
2377
  """
2469
2378
  The shape of the motion groups links to validate against colliders.
2470
2379
  Indexed along the kinematic chain, starting with a static base shape before first joint.
2471
2380
  The base of the motion group is not checked for collision against the environment.
2472
2381
 
2473
2382
  """
2474
- tool: Optional[Tool] = None
2383
+ tool: Tool | None = None
2475
2384
  """
2476
2385
  Shape of the tool to validate against colliders.
2477
2386
 
2478
2387
  """
2479
- self_collision_detection: Optional[bool] = True
2388
+ self_collision_detection: bool | None = True
2480
2389
  """
2481
2390
  If true, self-collision detection is enabled for the motion group.
2482
2391
 
@@ -2504,7 +2413,7 @@ class CollisionSetups(RootModel):
2504
2413
 
2505
2414
  """
2506
2415
 
2507
- root: Dict[str, CollisionSetup]
2416
+ root: dict[str, CollisionSetup]
2508
2417
 
2509
2418
 
2510
2419
  class MotionGroupSetup(BaseModel):
@@ -2513,18 +2422,18 @@ class MotionGroupSetup(BaseModel):
2513
2422
  """
2514
2423
  [ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.
2515
2424
  """
2516
- mounting: Optional[Pose] = None
2425
+ mounting: Pose | None = None
2517
2426
  """
2518
2427
  The offset from the world frame to the motion group base.
2519
2428
  """
2520
- tcp_offset: Optional[Pose] = None
2521
- global_limits: Optional[LimitSet] = None
2522
- payload: Optional[Payload] = None
2523
- collision_setups: Optional[CollisionSetups] = None
2429
+ tcp_offset: Pose | None = None
2430
+ global_limits: LimitSet | None = None
2431
+ payload: Payload | None = None
2432
+ collision_setups: CollisionSetups | None = None
2524
2433
 
2525
2434
 
2526
2435
  class DoubleArray(RootModel):
2527
- root: List[float]
2436
+ root: list[float]
2528
2437
 
2529
2438
  def __getitem__(self, index: int) -> float:
2530
2439
  """
@@ -2552,23 +2461,70 @@ class DoubleArray(RootModel):
2552
2461
 
2553
2462
 
2554
2463
  class BlendingAuto(BaseModel):
2555
- min_velocity_in_percent: Annotated[Optional[int], Field(ge=0, le=100)] = None
2464
+ min_velocity_in_percent: Annotated[int | None, Field(ge=0, le=100)] = None
2556
2465
  """
2557
- Auto-blending is used to keep a constant velocity when blending between two motion commands.
2466
+ 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
2467
  It changes the TCP path around the target point of the motion command.
2559
- The value represents the percentage of the original velocity.
2468
+ The value represents the percentage of the original velocity. Auto-blending is always performed in cartesian space.
2560
2469
 
2561
2470
  """
2562
2471
  blending_name: Literal['BlendingAuto'] = 'BlendingAuto'
2563
2472
 
2564
2473
 
2474
+ class BlendingSpace(Enum):
2475
+ """
2476
+ Defines the space in which blending is performed.
2477
+ - `JOINT`: Zone blending is performed in joint space
2478
+ - `CARTESIAN`: Auto-blending is performed in cartesian space
2479
+
2480
+ """
2481
+
2482
+ JOINT = 'JOINT'
2483
+ CARTESIAN = 'CARTESIAN'
2484
+
2485
+
2565
2486
  class BlendingPosition(BaseModel):
2566
- position_zone_radius: Optional[float] = None
2487
+ position_zone_radius: float | None = None
2567
2488
  """
2568
2489
  Specifies the maximum radius in [mm] around the motion command's target point
2569
2490
  where the TCP path can be altered to blend the motion command into the following one.
2570
2491
  If auto-blending blends too much of the resulting trajectory, use position-blending to restrict the blending zone radius.
2571
2492
 
2493
+ """
2494
+ position_zone_percentage: Annotated[float | None, Field(ge=0.0, le=100.0)] = None
2495
+ """
2496
+ Specifies the maximum blending percentage based on the trajectory length in position space
2497
+ around the motion command's target point. Percentage indicated in 0.0 - 100.0.
2498
+
2499
+ """
2500
+ orientation_zone_radius: float | None = None
2501
+ """
2502
+ Specifies the maximum radius in [rad] for orientation blending around the motion command's
2503
+ target orientation. At the target's orientation, the TCP orientation can be altered to blend into the following motion.
2504
+
2505
+ """
2506
+ orientation_zone_percentage: Annotated[float | None, Field(ge=0.0, le=100.0)] = None
2507
+ """
2508
+ Specifies the maximum blending percentage for orientation blending
2509
+ based on the trajectory length in orientation space. Percentage indicated in 0.0 - 100.0.
2510
+
2511
+ """
2512
+ joints_zone_radius: float | None = None
2513
+ """
2514
+ Specifies the maximum radius in [rad] for joint space blending around the motion command's
2515
+ target joint configuration. At the target joint configuration, the joint path can be altered to blend into the following motion.
2516
+
2517
+ """
2518
+ joints_zone_percentage: Annotated[float | None, Field(ge=0.0, le=100.0)] = None
2519
+ """
2520
+ Specifies the maximum blending percentage for joint space blending
2521
+ based on the trajectory length in joint space. Percentage indicated in 0.0 to 100.0.
2522
+
2523
+ """
2524
+ space: BlendingSpace | None = None
2525
+ """
2526
+ Defines the space in which blending is performed.
2527
+
2572
2528
  """
2573
2529
  blending_name: Literal['BlendingPosition'] = 'BlendingPosition'
2574
2530
 
@@ -2579,34 +2535,34 @@ class LimitsOverride(BaseModel):
2579
2535
 
2580
2536
  """
2581
2537
 
2582
- joint_velocity_limits: Optional[List[float]] = None
2538
+ joint_velocity_limits: list[float] | None = None
2583
2539
  """
2584
2540
  Maximum joint velocity in [rad/s] for each joint.
2585
2541
  Either leave this field empty or set a value for each joint.
2586
2542
 
2587
2543
  """
2588
- joint_acceleration_limits: Optional[List[float]] = None
2544
+ joint_acceleration_limits: list[float] | None = None
2589
2545
  """
2590
2546
  Maximum joint acceleration in [rad/s^2] for each joint.
2591
2547
  Either leave this field empty or set a value for each joint.
2592
2548
 
2593
2549
  """
2594
- tcp_velocity_limit: Optional[float] = None
2550
+ tcp_velocity_limit: float | None = None
2595
2551
  """
2596
2552
  Maximum allowed TCP velocity in [mm/s].
2597
2553
 
2598
2554
  """
2599
- tcp_acceleration_limit: Optional[float] = None
2555
+ tcp_acceleration_limit: float | None = None
2600
2556
  """
2601
2557
  Maximum allowed TCP acceleration in [mm/s^2].
2602
2558
 
2603
2559
  """
2604
- tcp_orientation_velocity_limit: Optional[float] = None
2560
+ tcp_orientation_velocity_limit: float | None = None
2605
2561
  """
2606
2562
  Maximum allowed TCP rotation velocity in [rad/s].
2607
2563
 
2608
2564
  """
2609
- tcp_orientation_acceleration_limit: Optional[float] = None
2565
+ tcp_orientation_acceleration_limit: float | None = None
2610
2566
  """
2611
2567
  Maximum allowed TCP rotation acceleration in [rad/s^2].
2612
2568
 
@@ -2637,7 +2593,7 @@ class PathCubicSpline(BaseModel):
2637
2593
 
2638
2594
  """
2639
2595
 
2640
- parameters: List[CubicSplineParameter]
2596
+ parameters: list[CubicSplineParameter]
2641
2597
  path_definition_name: Literal['PathCubicSpline'] = 'PathCubicSpline'
2642
2598
 
2643
2599
 
@@ -2678,21 +2634,20 @@ class PathJointPTP(BaseModel):
2678
2634
 
2679
2635
  class MotionCommand(BaseModel):
2680
2636
  blending: Annotated[
2681
- Optional[Union[BlendingAuto, BlendingPosition]],
2682
- Field(discriminator='blending_name'),
2637
+ BlendingAuto | BlendingPosition | None, Field(discriminator='blending_name')
2683
2638
  ] = None
2684
2639
  """
2685
2640
  Blending alters the TCP path at the target point of a motion command
2686
2641
  to ensure that the velocity does not drop to zero between two motion commands.
2687
2642
 
2688
2643
  """
2689
- limits_override: Optional[LimitsOverride] = None
2644
+ limits_override: LimitsOverride | None = None
2690
2645
  """
2691
2646
  Limits override is used to override the global limits of the motion group for this segment of the motion.
2692
2647
 
2693
2648
  """
2694
2649
  path: Annotated[
2695
- Union[PathCartesianPTP, PathCubicSpline, PathLine, PathCircle, PathJointPTP],
2650
+ PathCartesianPTP | PathCubicSpline | PathLine | PathCircle | PathJointPTP,
2696
2651
  Field(discriminator='path_definition_name'),
2697
2652
  ]
2698
2653
 
@@ -2711,7 +2666,7 @@ class PlanTrajectoryRequest(BaseModel):
2711
2666
  To move the robot to the start joint position use the endpoint [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P).
2712
2667
 
2713
2668
  """
2714
- motion_commands: List[MotionCommand]
2669
+ motion_commands: list[MotionCommand]
2715
2670
  """
2716
2671
  List of motion commands. A command consists of a path definition (line, circle, joint_ptp, cartesian_ptp, cubic_spline), blending, and limits override.
2717
2672
 
@@ -2719,17 +2674,17 @@ class PlanTrajectoryRequest(BaseModel):
2719
2674
 
2720
2675
 
2721
2676
  class JointTrajectory(BaseModel):
2722
- joint_positions: List[Joints]
2677
+ joint_positions: list[Joints]
2723
2678
  """
2724
2679
  List of joint positions [rad] for each sample.
2725
2680
  The number of samples must match the number of timestamps provided in the times field.
2726
2681
 
2727
2682
  """
2728
- times: List[float]
2683
+ times: list[float]
2729
2684
  """
2730
2685
  Timestamp for each sample [s].
2731
2686
  """
2732
- locations: List[Location]
2687
+ locations: list[Location]
2733
2688
 
2734
2689
 
2735
2690
  class FeedbackOutOfWorkspace(BaseModel):
@@ -2737,7 +2692,7 @@ class FeedbackOutOfWorkspace(BaseModel):
2737
2692
  Requested TCP pose is outside of motion group's workspace.
2738
2693
  """
2739
2694
 
2740
- invalid_tcp_pose: Optional[Pose] = None
2695
+ invalid_tcp_pose: Pose | None = None
2741
2696
  error_feedback_name: Literal['FeedbackOutOfWorkspace'] = 'FeedbackOutOfWorkspace'
2742
2697
 
2743
2698
 
@@ -2758,8 +2713,8 @@ class FeedbackSingularity(BaseModel):
2758
2713
 
2759
2714
  """
2760
2715
 
2761
- singularity_type: Optional[SingularityTypeEnum] = None
2762
- singular_joint_position: Optional[DoubleArray] = None
2716
+ singularity_type: SingularityTypeEnum | None = None
2717
+ singular_joint_position: DoubleArray | None = None
2763
2718
  error_feedback_name: Literal['FeedbackSingularity'] = 'FeedbackSingularity'
2764
2719
 
2765
2720
 
@@ -2770,46 +2725,44 @@ class FeedbackJointLimitExceeded(BaseModel):
2770
2725
 
2771
2726
  """
2772
2727
 
2773
- joint_index: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2774
- joint_position: Optional[DoubleArray] = None
2728
+ joint_index: Annotated[int | None, Field(ge=0, le=2147483647)] = None
2729
+ joint_position: DoubleArray | None = None
2775
2730
  error_feedback_name: Literal['FeedbackJointLimitExceeded'] = (
2776
2731
  'FeedbackJointLimitExceeded'
2777
2732
  )
2778
2733
 
2779
2734
 
2780
2735
  class CollisionContact(BaseModel):
2781
- local: Optional[Vector3d] = None
2782
- root: Optional[Vector3d] = None
2736
+ local: Vector3d | None = None
2737
+ root: Vector3d | None = None
2783
2738
 
2784
2739
 
2785
2740
  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
2741
+ id_of_a: str | None = None
2742
+ id_of_b: str | None = None
2743
+ id_of_layer: str | None = None
2744
+ normal_root_on_b: Vector3d | None = None
2745
+ position_on_a: CollisionContact | None = None
2746
+ position_on_b: CollisionContact | None = None
2792
2747
 
2793
2748
 
2794
2749
  class FeedbackCollision(BaseModel):
2795
- collisions: Optional[List[Collision]] = None
2796
- joint_position: Optional[DoubleArray] = None
2797
- tcp_pose: Optional[Pose] = None
2750
+ collisions: list[Collision] | None = None
2751
+ joint_position: DoubleArray | None = None
2752
+ tcp_pose: Pose | None = None
2798
2753
  error_feedback_name: Literal['FeedbackCollision'] = 'FeedbackCollision'
2799
2754
 
2800
2755
 
2801
2756
  class PlanTrajectoryFailedResponse(BaseModel):
2802
2757
  error_feedback: Annotated[
2803
- Union[
2804
- FeedbackOutOfWorkspace,
2805
- FeedbackSingularity,
2806
- FeedbackJointLimitExceeded,
2807
- FeedbackCollision,
2808
- ],
2758
+ FeedbackOutOfWorkspace
2759
+ | FeedbackSingularity
2760
+ | FeedbackJointLimitExceeded
2761
+ | FeedbackCollision,
2809
2762
  Field(discriminator='error_feedback_name'),
2810
2763
  ]
2811
2764
  error_location_on_trajectory: Location
2812
- joint_trajectory: Optional[JointTrajectory] = None
2765
+ joint_trajectory: JointTrajectory | None = None
2813
2766
  """
2814
2767
  The joint trajectory from the start joint position to the error.
2815
2768
 
@@ -2817,14 +2770,14 @@ class PlanTrajectoryFailedResponse(BaseModel):
2817
2770
 
2818
2771
 
2819
2772
  class PlanTrajectoryResponse(BaseModel):
2820
- response: Union[JointTrajectory, PlanTrajectoryFailedResponse]
2773
+ response: JointTrajectory | PlanTrajectoryFailedResponse
2821
2774
 
2822
2775
 
2823
2776
  class ValidationError(BaseModel):
2824
- loc: Annotated[List[Union[str, int]], Field(title='Location')]
2777
+ loc: Annotated[list[str | int], Field(title='Location')]
2825
2778
  msg: Annotated[str, Field(title='Message')]
2826
2779
  type: Annotated[str, Field(title='Error Type')]
2827
- input: Dict[str, Any]
2780
+ input: dict[str, Any]
2828
2781
 
2829
2782
 
2830
2783
  class ErrorInvalidJointCount(BaseModel):
@@ -2853,12 +2806,12 @@ class ErrorJointLimitExceeded(BaseModel):
2853
2806
 
2854
2807
  """
2855
2808
 
2856
- joint_index: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2809
+ joint_index: Annotated[int | None, Field(ge=0, le=2147483647)] = None
2857
2810
  """
2858
2811
  Index of the joint exceeding its limits (0-based).
2859
2812
 
2860
2813
  """
2861
- joint_position: Optional[DoubleArray] = None
2814
+ joint_position: DoubleArray | None = None
2862
2815
  """
2863
2816
  The joint position violating the limits.
2864
2817
 
@@ -2872,8 +2825,8 @@ class ErrorJointPositionCollision(BaseModel):
2872
2825
 
2873
2826
  """
2874
2827
 
2875
- collisions: Optional[List[Collision]] = None
2876
- joint_position: Optional[DoubleArray] = None
2828
+ collisions: list[Collision] | None = None
2829
+ joint_position: DoubleArray | None = None
2877
2830
  """
2878
2831
  The joint position that collides.
2879
2832
 
@@ -2885,13 +2838,10 @@ class ErrorJointPositionCollision(BaseModel):
2885
2838
 
2886
2839
  class PlanValidationError(ValidationError):
2887
2840
  data: Annotated[
2888
- Optional[
2889
- Union[
2890
- ErrorInvalidJointCount,
2891
- ErrorJointLimitExceeded,
2892
- ErrorJointPositionCollision,
2893
- ]
2894
- ],
2841
+ ErrorInvalidJointCount
2842
+ | ErrorJointLimitExceeded
2843
+ | ErrorJointPositionCollision
2844
+ | None,
2895
2845
  Field(discriminator='error_feedback_name'),
2896
2846
  ] = None
2897
2847
  """
@@ -2901,7 +2851,7 @@ class PlanValidationError(ValidationError):
2901
2851
 
2902
2852
 
2903
2853
  class Plan422Response(BaseModel):
2904
- detail: Annotated[Optional[List[PlanValidationError]], Field(title='Detail')] = None
2854
+ detail: Annotated[list[PlanValidationError] | None, Field(title='Detail')] = None
2905
2855
 
2906
2856
 
2907
2857
  class RRTConnectAlgorithm(BaseModel):
@@ -2916,25 +2866,25 @@ class RRTConnectAlgorithm(BaseModel):
2916
2866
  This is a custom implementation optimized for manipulator kinematics and collision checking in industrial contexts.
2917
2867
 
2918
2868
  """
2919
- max_iterations: Annotated[Optional[int], Field(ge=1)] = 10000
2869
+ max_iterations: Annotated[int | None, Field(ge=1)] = 10000
2920
2870
  """
2921
2871
  Maximum number of iterations for the RRT Connect algorithm.
2922
2872
  Higher values increase likelihood of success, but also computation time.
2923
2873
 
2924
2874
  """
2925
- max_step_size: Optional[float] = 1
2875
+ max_step_size: float | None = 1
2926
2876
  """
2927
2877
  Maximum step size for tree extension in joint space.
2928
2878
  """
2929
- adaptive_step_size: Optional[bool] = True
2879
+ adaptive_step_size: bool | None = True
2930
2880
  """
2931
2881
  Adjust the maximum step size during the search based on the recent success rate of tree expansion.
2932
2882
  """
2933
- apply_smoothing: Optional[bool] = True
2883
+ apply_smoothing: bool | None = True
2934
2884
  """
2935
2885
  Apply smoothing after the search has succeeded. This will remove as many intermediate points as possible while keeping the path valid.
2936
2886
  """
2937
- apply_blending: Optional[bool] = True
2887
+ apply_blending: bool | None = True
2938
2888
  """
2939
2889
  Apply blending after the search has succeeded and smoothing has been applied. This will apply the largest viable blending at each intermediate point.
2940
2890
  """
@@ -2949,7 +2899,7 @@ class MidpointInsertionAlgorithm(BaseModel):
2949
2899
  This algorithm adds a single midpoint between the start and target joint position to find collision-free paths.
2950
2900
 
2951
2901
  """
2952
- max_iterations: Annotated[Optional[int], Field(ge=1)] = 1000
2902
+ max_iterations: Annotated[int | None, Field(ge=1)] = 1000
2953
2903
  """
2954
2904
  Maximum number of iterations for the midpoint insertion algorithm.
2955
2905
  Higher values increase likelyhood of success, but also computation time (linear).
@@ -2959,7 +2909,7 @@ class MidpointInsertionAlgorithm(BaseModel):
2959
2909
 
2960
2910
  class CollisionFreeAlgorithm(RootModel):
2961
2911
  root: Annotated[
2962
- Union[RRTConnectAlgorithm, MidpointInsertionAlgorithm],
2912
+ RRTConnectAlgorithm | MidpointInsertionAlgorithm,
2963
2913
  Field(discriminator='algorithm_name', title='CollisionFreeAlgorithm'),
2964
2914
  ]
2965
2915
  """
@@ -3003,7 +2953,7 @@ class ErrorMaxIterationsExceeded(BaseModel):
3003
2953
 
3004
2954
  """
3005
2955
 
3006
- max_iterations: Optional[int] = None
2956
+ max_iterations: int | None = None
3007
2957
  """
3008
2958
  The maximum number of iterations that was reached.
3009
2959
 
@@ -3030,7 +2980,7 @@ class PlanCollisionFreeResponse(BaseModel):
3030
2980
 
3031
2981
  """
3032
2982
 
3033
- response: Union[JointTrajectory, PlanCollisionFreeFailedResponse]
2983
+ response: JointTrajectory | PlanCollisionFreeFailedResponse
3034
2984
 
3035
2985
 
3036
2986
  class JointPositionLimits(RootModel):
@@ -3039,7 +2989,7 @@ class JointPositionLimits(RootModel):
3039
2989
 
3040
2990
  """
3041
2991
 
3042
- root: Annotated[List[LimitRange], Field(title='JointPositionLimits')]
2992
+ root: Annotated[list[LimitRange], Field(title='JointPositionLimits')]
3043
2993
  """
3044
2994
  Joint position limits in [rad], indexed starting from base.
3045
2995
 
@@ -3072,27 +3022,36 @@ class JointPositionLimits(RootModel):
3072
3022
 
3073
3023
  class InverseKinematicsRequest(BaseModel):
3074
3024
  motion_group_model: MotionGroupModel
3075
- tcp_poses: List[Pose]
3025
+ tcp_poses: list[Pose]
3076
3026
  """
3077
3027
  List of TCP poses for which the inverse solutions are computed.
3078
3028
 
3079
3029
  """
3080
- tcp_offset: Optional[Pose] = None
3081
- mounting: Optional[Pose] = None
3030
+ tcp_offset: Pose | None = None
3031
+ mounting: Pose | None = None
3082
3032
  """
3083
3033
  Offset from the world frame to the motion group base.
3084
3034
  """
3085
- joint_position_limits: Optional[JointPositionLimits] = None
3086
- collision_setups: Optional[CollisionSetups] = None
3035
+ joint_position_limits: JointPositionLimits | None = None
3036
+ collision_setups: CollisionSetups | None = None
3037
+ reference_joint_position: DoubleArray | None = None
3038
+ """
3039
+ If present, all solutions are shifted to the same periodicity
3040
+ as the reference: Each individual joint angle is shifted
3041
+ by integer multiples of 2 pi (whole revolutions) until it's
3042
+ as close to the reference as possible. The solutions are sorted
3043
+ by ascending distance (L2 norm) from the reference.
3044
+
3045
+ """
3087
3046
 
3088
3047
 
3089
3048
  class InverseKinematicsResponse(BaseModel):
3090
- joints: List[List[DoubleArray]]
3049
+ joints: list[list[DoubleArray]]
3091
3050
 
3092
3051
 
3093
3052
  class InverseKinematicsValidationError(ValidationError):
3094
3053
  data: Annotated[
3095
- Optional[Union[ErrorInvalidJointCount, ErrorJointLimitExceeded]],
3054
+ ErrorInvalidJointCount | ErrorJointLimitExceeded | None,
3096
3055
  Field(discriminator='error_feedback_name'),
3097
3056
  ] = None
3098
3057
  """
@@ -3103,26 +3062,26 @@ class InverseKinematicsValidationError(ValidationError):
3103
3062
 
3104
3063
  class InverseKinematics422Response(BaseModel):
3105
3064
  detail: Annotated[
3106
- Optional[List[InverseKinematicsValidationError]], Field(title='Detail')
3065
+ list[InverseKinematicsValidationError] | None, Field(title='Detail')
3107
3066
  ] = None
3108
3067
 
3109
3068
 
3110
3069
  class ForwardKinematicsRequest(BaseModel):
3111
3070
  motion_group_model: MotionGroupModel
3112
- joint_positions: List[DoubleArray]
3071
+ joint_positions: list[DoubleArray]
3113
3072
  """
3114
3073
  List of joint positions [rad] for which TCP poses are computed.
3115
3074
 
3116
3075
  """
3117
- tcp_offset: Optional[Pose] = None
3118
- mounting: Optional[Pose] = None
3076
+ tcp_offset: Pose | None = None
3077
+ mounting: Pose | None = None
3119
3078
  """
3120
3079
  Offset from the world frame to the motion group base.
3121
3080
  """
3122
3081
 
3123
3082
 
3124
3083
  class ForwardKinematicsResponse(BaseModel):
3125
- tcp_poses: List[Pose]
3084
+ tcp_poses: list[Pose]
3126
3085
  """
3127
3086
  List of computed TCP poses corresponding to the input joint positions.
3128
3087
 
@@ -3130,17 +3089,17 @@ class ForwardKinematicsResponse(BaseModel):
3130
3089
 
3131
3090
 
3132
3091
  class ForwardKinematicsValidationError(ValidationError):
3133
- data: Optional[ErrorInvalidJointCount] = None
3092
+ data: ErrorInvalidJointCount | None = None
3134
3093
 
3135
3094
 
3136
3095
  class ForwardKinematics422Response(BaseModel):
3137
3096
  detail: Annotated[
3138
- Optional[List[ForwardKinematicsValidationError]], Field(title='Detail')
3097
+ list[ForwardKinematicsValidationError] | None, Field(title='Detail')
3139
3098
  ] = None
3140
3099
 
3141
3100
 
3142
3101
  class ListTrajectoriesResponse(BaseModel):
3143
- trajectories: Optional[List[str]] = None
3102
+ trajectories: list[str] | None = None
3144
3103
  """
3145
3104
  Identifiers of trajectories which are currently cached.
3146
3105
  Use [addTrajectory](addTrajectory) to add a new trajectory. Adding trajectories is necessary to execute them.
@@ -3160,7 +3119,7 @@ class AddTrajectoryRequest(BaseModel):
3160
3119
  an equal number of corresponding timestamps.
3161
3120
 
3162
3121
  """
3163
- tcp: Optional[str] = None
3122
+ tcp: str | None = None
3164
3123
  """
3165
3124
  Unique identifier of the tool the trajectory is planned for.
3166
3125
  """
@@ -3171,13 +3130,13 @@ class TcpRequiredError(BaseModel):
3171
3130
  Requested motion group requires TCP to be defined.
3172
3131
  """
3173
3132
 
3174
- tcp_missing: Optional[Dict[str, Any]] = None
3133
+ tcp_missing: dict[str, Any] | None = None
3175
3134
 
3176
3135
 
3177
3136
  class InconsistentTrajectorySize(BaseModel):
3178
- joint_position_size: Optional[int] = None
3179
- times_size: Optional[int] = None
3180
- locations_size: Optional[int] = None
3137
+ joint_position_size: int | None = None
3138
+ times_size: int | None = None
3139
+ locations_size: int | None = None
3181
3140
 
3182
3141
 
3183
3142
  class InconsistentTrajectorySizeError(BaseModel):
@@ -3186,24 +3145,24 @@ class InconsistentTrajectorySizeError(BaseModel):
3186
3145
 
3187
3146
  """
3188
3147
 
3189
- inconsistent_trajectory_size: Optional[InconsistentTrajectorySize] = None
3148
+ inconsistent_trajectory_size: InconsistentTrajectorySize | None = None
3190
3149
 
3191
3150
 
3192
3151
  class JointLimitExceededError(BaseModel):
3193
- joint_limit_exceeded: Optional[FeedbackJointLimitExceeded] = None
3152
+ joint_limit_exceeded: FeedbackJointLimitExceeded | None = None
3194
3153
 
3195
3154
 
3196
3155
  class CollisionError(BaseModel):
3197
- collision: Optional[FeedbackCollision] = None
3156
+ collision: FeedbackCollision | None = None
3198
3157
 
3199
3158
 
3200
3159
  class TorqueExceeded(BaseModel):
3201
- torque_value: Optional[float] = None
3160
+ torque_value: float | None = None
3202
3161
  """
3203
3162
  The torque value that was exceeded.
3204
3163
 
3205
3164
  """
3206
- torque_limit: Optional[float] = None
3165
+ torque_limit: float | None = None
3207
3166
  """
3208
3167
  The value of the torque limit that was exceeded.
3209
3168
 
@@ -3211,23 +3170,23 @@ class TorqueExceeded(BaseModel):
3211
3170
 
3212
3171
 
3213
3172
  class TorqueExceededError(BaseModel):
3214
- torque_exceeded: Optional[TorqueExceeded] = None
3173
+ torque_exceeded: TorqueExceeded | None = None
3215
3174
 
3216
3175
 
3217
3176
  class InvalidDof(BaseModel):
3218
- valid_dof: Optional[int] = None
3177
+ valid_dof: int | None = None
3219
3178
  """
3220
3179
  The valid degrees of freedom for the motion group.
3221
3180
 
3222
3181
  """
3223
- joint_position: Optional[List[float]] = None
3182
+ joint_position: list[float] | None = None
3224
3183
  """
3225
3184
  The joint position that is out of its limits.
3226
3185
  """
3227
3186
 
3228
3187
 
3229
3188
  class InvalidDofError(BaseModel):
3230
- invalid_dof: Optional[InvalidDof] = None
3189
+ invalid_dof: InvalidDof | None = None
3231
3190
 
3232
3191
 
3233
3192
  class NanValue(BaseModel):
@@ -3235,33 +3194,32 @@ class NanValue(BaseModel):
3235
3194
  Requested joint position contains NaN values.
3236
3195
  """
3237
3196
 
3238
- joint_position: Optional[List[float]] = None
3197
+ joint_position: list[float] | None = None
3239
3198
  """
3240
3199
  The joint position that is out of its limits.
3241
3200
  """
3242
3201
 
3243
3202
 
3244
3203
  class NanValueError(BaseModel):
3245
- nan_value: Optional[NanValue] = None
3204
+ nan_value: NanValue | None = None
3246
3205
  """
3247
3206
  Requested joint position contains NaN values.
3248
3207
  """
3249
3208
 
3250
3209
 
3251
3210
  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
3211
+ message: str | None = None
3212
+ location: Location | None = None
3213
+ data: (
3214
+ TcpRequiredError
3215
+ | InconsistentTrajectorySizeError
3216
+ | JointLimitExceededError
3217
+ | CollisionError
3218
+ | TorqueExceededError
3219
+ | InvalidDofError
3220
+ | NanValueError
3221
+ | None
3222
+ ) = None
3265
3223
 
3266
3224
 
3267
3225
  class AddTrajectoryResponse(BaseModel):
@@ -3276,12 +3234,12 @@ class AddTrajectoryResponse(BaseModel):
3276
3234
 
3277
3235
  """
3278
3236
 
3279
- trajectory: Optional[str] = None
3237
+ trajectory: str | None = None
3280
3238
  """
3281
3239
  The unique identifier of the trajectory. Use this identifier to execute the trajectory with the [executeTrajectory](executeTrajectory) endpoint.
3282
3240
 
3283
3241
  """
3284
- error: Optional[AddTrajectoryError] = None
3242
+ error: AddTrajectoryError | None = None
3285
3243
  """
3286
3244
  Always check this field first. If this field is present, the trajectory has an error and is only partially or not executable.
3287
3245
 
@@ -3324,7 +3282,7 @@ class TrajectoryData(BaseModel):
3324
3282
  Type specifier for server, set automatically.
3325
3283
 
3326
3284
  """
3327
- motion_group: Optional[str] = None
3285
+ motion_group: str | None = None
3328
3286
  """
3329
3287
  Identifier of the motion-group.
3330
3288
  """
@@ -3334,7 +3292,7 @@ class TrajectoryData(BaseModel):
3334
3292
  an equal number of corresponding timestamps.
3335
3293
 
3336
3294
  """
3337
- tcp: Optional[str] = None
3295
+ tcp: str | None = None
3338
3296
  """
3339
3297
  Unique identifier of the tool the trajectory is planned for.
3340
3298
  """
@@ -3354,14 +3312,14 @@ class InitializeMovementRequest(BaseModel):
3354
3312
 
3355
3313
  """
3356
3314
  trajectory: Annotated[
3357
- Union[TrajectoryId, TrajectoryData], Field(discriminator='message_type')
3315
+ TrajectoryId | TrajectoryData, Field(discriminator='message_type')
3358
3316
  ]
3359
3317
  """
3360
3318
  The trajectory which should be executed and locked to the connection.
3361
3319
 
3362
3320
  """
3363
- initial_location: Optional[Location] = None
3364
- response_coordinate_system: Optional[str] = None
3321
+ initial_location: Location | None = None
3322
+ response_coordinate_system: str | None = None
3365
3323
  """
3366
3324
  Unique identifier addressing a coordinate system to which the responses are transformed.
3367
3325
  If not set, world coordinate system is used.
@@ -3449,26 +3407,26 @@ class StartMovementRequest(BaseModel):
3449
3407
  Type specifier for server, set automatically.
3450
3408
 
3451
3409
  """
3452
- direction: Optional[Direction] = 'DIRECTION_FORWARD'
3453
- target_location: Optional[Location] = None
3410
+ direction: Direction | None = 'DIRECTION_FORWARD'
3411
+ target_location: Location | None = None
3454
3412
  """
3455
3413
  The target location to which the motion group moves along the trajectory to.
3456
3414
  If `direction` and `target_location` are both specified, target location takes precedence.
3457
3415
  If neither is specified, the default is `DIRECTION_FORWARD`.
3458
3416
 
3459
3417
  """
3460
- set_outputs: Optional[List[SetIO]] = None
3418
+ set_outputs: list[SetIO] | None = None
3461
3419
  """
3462
3420
  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
3421
  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
3422
 
3465
3423
  """
3466
- start_on_io: Optional[StartOnIO] = None
3424
+ start_on_io: StartOnIO | None = None
3467
3425
  """
3468
3426
  Defines an input/output that is listened to before the movement. Execution starts if the defined comparator evaluates to `true`.
3469
3427
 
3470
3428
  """
3471
- pause_on_io: Optional[PauseOnIO] = None
3429
+ pause_on_io: PauseOnIO | None = None
3472
3430
  """
3473
3431
  Defines an input/output that is listened to during the movement. Execution pauses if the defined comparator evaluates to `true`.
3474
3432
 
@@ -3512,12 +3470,10 @@ class PlaybackSpeedRequest(BaseModel):
3512
3470
 
3513
3471
  class ExecuteTrajectoryRequest(RootModel):
3514
3472
  root: Annotated[
3515
- Union[
3516
- InitializeMovementRequest,
3517
- StartMovementRequest,
3518
- PauseMovementRequest,
3519
- PlaybackSpeedRequest,
3520
- ],
3473
+ InitializeMovementRequest
3474
+ | StartMovementRequest
3475
+ | PauseMovementRequest
3476
+ | PlaybackSpeedRequest,
3521
3477
  Field(discriminator='message_type', title='ExecuteTrajectoryRequest'),
3522
3478
  ]
3523
3479
 
@@ -3528,11 +3484,11 @@ class InitializeMovementResponse(BaseModel):
3528
3484
 
3529
3485
  """
3530
3486
 
3531
- message: Optional[str] = None
3487
+ message: str | None = None
3532
3488
  """
3533
3489
  Error message in case of invalid InitializeMovementRequest.
3534
3490
  """
3535
- add_trajectory_error: Optional[AddTrajectoryError] = None
3491
+ add_trajectory_error: AddTrajectoryError | None = None
3536
3492
  """
3537
3493
  Error can occur if joint trajectory was added by [InitializeMovementRequest](InitializeMovementRequest) and the trajectory is invalid.
3538
3494
 
@@ -3548,7 +3504,7 @@ class StartMovementResponse(BaseModel):
3548
3504
 
3549
3505
  """
3550
3506
 
3551
- message: Optional[str] = None
3507
+ message: str | None = None
3552
3508
  """
3553
3509
  Error message in case of invalid StartMovementResquest.
3554
3510
  """
@@ -3563,7 +3519,7 @@ class PauseMovementResponse(BaseModel):
3563
3519
 
3564
3520
  """
3565
3521
 
3566
- message: Optional[str] = None
3522
+ message: str | None = None
3567
3523
  """
3568
3524
  Error message in case of invalid PauseMovementResquest.
3569
3525
  """
@@ -3576,7 +3532,7 @@ class PlaybackSpeedResponse(BaseModel):
3576
3532
 
3577
3533
  """
3578
3534
 
3579
- message: Optional[str] = None
3535
+ message: str | None = None
3580
3536
  """
3581
3537
  Error message in case of invalid PlaybackSpeedRequest.
3582
3538
  """
@@ -3598,13 +3554,11 @@ class MovementErrorResponse(BaseModel):
3598
3554
 
3599
3555
  class ExecuteTrajectoryResponse(RootModel):
3600
3556
  root: Annotated[
3601
- Union[
3602
- InitializeMovementResponse,
3603
- StartMovementResponse,
3604
- PauseMovementResponse,
3605
- PlaybackSpeedResponse,
3606
- MovementErrorResponse,
3607
- ],
3557
+ InitializeMovementResponse
3558
+ | StartMovementResponse
3559
+ | PauseMovementResponse
3560
+ | PlaybackSpeedResponse
3561
+ | MovementErrorResponse,
3608
3562
  Field(discriminator='kind', title='ExecuteTrajectoryResponse'),
3609
3563
  ]
3610
3564
 
@@ -3623,17 +3577,11 @@ class InitializeJoggingRequest(BaseModel):
3623
3577
  """
3624
3578
  Identifier of the motion group.
3625
3579
  """
3626
- tcp: Optional[str] = None
3580
+ tcp: str | None = None
3627
3581
  """
3628
3582
  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
3583
 
3630
3584
  """
3631
- response_coordinate_system: Optional[str] = None
3632
- """
3633
- Unique identifier addressing a coordinate system to which the responses are transformed.
3634
- If not set, world coordinate system is used.
3635
-
3636
- """
3637
3585
 
3638
3586
 
3639
3587
  class JointVelocityRequest(BaseModel):
@@ -3666,7 +3614,7 @@ class TcpVelocityRequest(BaseModel):
3666
3614
  """
3667
3615
  translation: Vector3d
3668
3616
  rotation: Vector3d
3669
- use_tool_coordinate_system: Optional[bool] = False
3617
+ use_tool_coordinate_system: bool | None = False
3670
3618
  """
3671
3619
  If true, TCP velocities are interpreted in the tool coordinate system, specified by the TCP.
3672
3620
  If false, TCP velocities are interpreted in the world coordinate system.
@@ -3689,12 +3637,10 @@ class PauseJoggingRequest(BaseModel):
3689
3637
 
3690
3638
  class ExecuteJoggingRequest(RootModel):
3691
3639
  root: Annotated[
3692
- Union[
3693
- InitializeJoggingRequest,
3694
- JointVelocityRequest,
3695
- TcpVelocityRequest,
3696
- PauseJoggingRequest,
3697
- ],
3640
+ InitializeJoggingRequest
3641
+ | JointVelocityRequest
3642
+ | TcpVelocityRequest
3643
+ | PauseJoggingRequest,
3698
3644
  Field(discriminator='message_type', title='ExecuteJoggingRequest'),
3699
3645
  ]
3700
3646
 
@@ -3705,7 +3651,7 @@ class InitializeJoggingResponse(BaseModel):
3705
3651
 
3706
3652
  """
3707
3653
 
3708
- message: Optional[str] = None
3654
+ message: str | None = None
3709
3655
  """
3710
3656
  Error message in case of invalid InitializeJoggingRequest.
3711
3657
  """
@@ -3718,7 +3664,7 @@ class PauseJoggingResponse(BaseModel):
3718
3664
 
3719
3665
  """
3720
3666
 
3721
- message: Optional[str] = None
3667
+ message: str | None = None
3722
3668
  """
3723
3669
  Error message in case of invalid PauseJoggingRequest.
3724
3670
  """
@@ -3731,7 +3677,7 @@ class TcpVelocityResponse(BaseModel):
3731
3677
 
3732
3678
  """
3733
3679
 
3734
- message: Optional[str] = None
3680
+ message: str | None = None
3735
3681
  """
3736
3682
  Error message in case of invalid TcpVelocityRequest.
3737
3683
  """
@@ -3744,7 +3690,7 @@ class JointVelocityResponse(BaseModel):
3744
3690
 
3745
3691
  """
3746
3692
 
3747
- message: Optional[str] = None
3693
+ message: str | None = None
3748
3694
  """
3749
3695
  Error message in case of invalid JointVelocityRequest.
3750
3696
  """
@@ -3753,13 +3699,11 @@ class JointVelocityResponse(BaseModel):
3753
3699
 
3754
3700
  class ExecuteJoggingResponse(RootModel):
3755
3701
  root: Annotated[
3756
- Union[
3757
- InitializeJoggingResponse,
3758
- PauseJoggingResponse,
3759
- TcpVelocityResponse,
3760
- JointVelocityResponse,
3761
- MovementErrorResponse,
3762
- ],
3702
+ InitializeJoggingResponse
3703
+ | PauseJoggingResponse
3704
+ | TcpVelocityResponse
3705
+ | JointVelocityResponse
3706
+ | MovementErrorResponse,
3763
3707
  Field(discriminator='kind', title='ExecuteJoggingResponse'),
3764
3708
  ]
3765
3709
 
@@ -3779,14 +3723,14 @@ class Program(BaseModel):
3779
3723
  title='Unique program identifier',
3780
3724
  ),
3781
3725
  ]
3782
- name: Annotated[Optional[str], Field(title='Program name')] = None
3783
- description: Annotated[Optional[str], Field(title='Program description')] = None
3726
+ name: Annotated[str | None, Field(title='Program name')] = None
3727
+ description: Annotated[str | None, Field(title='Program description')] = None
3784
3728
  app: Annotated[str, Field(title='The app containing the program.')]
3785
3729
  input_schema: Annotated[
3786
- Optional[Dict[str, Any]], Field(title='Program input json schema')
3730
+ dict[str, Any] | None, Field(title='Program input json schema')
3787
3731
  ] = None
3788
3732
  preconditions: Annotated[
3789
- Optional[Dict[str, Any]],
3733
+ dict[str, Any] | None,
3790
3734
  Field(title='Preconditions before the program can be started'),
3791
3735
  ] = None
3792
3736
 
@@ -3796,7 +3740,7 @@ class ProgramStartRequest(BaseModel):
3796
3740
  The state of a program run.
3797
3741
  """
3798
3742
 
3799
- arguments: Dict[str, Any]
3743
+ arguments: dict[str, Any]
3800
3744
  """
3801
3745
  The arguments to pass to the program.
3802
3746
  """
@@ -3827,7 +3771,7 @@ class ProgramRun(BaseModel):
3827
3771
  """
3828
3772
  Unique identifier of the program
3829
3773
  """
3830
- app: Annotated[Optional[str], Field(title='App Id')] = None
3774
+ app: Annotated[str | None, Field(title='App Id')] = None
3831
3775
  """
3832
3776
  Identifier of the app that produced the program run
3833
3777
  """
@@ -3835,35 +3779,35 @@ class ProgramRun(BaseModel):
3835
3779
  """
3836
3780
  State of the program run
3837
3781
  """
3838
- logs: Annotated[Optional[str], Field(title='Logs')] = None
3782
+ logs: Annotated[str | None, Field(title='Logs')] = None
3839
3783
  """
3840
3784
  Logs of the program run
3841
3785
  """
3842
- stdout: Annotated[Optional[str], Field(title='Stdout')] = None
3786
+ stdout: Annotated[str | None, Field(title='Stdout')] = None
3843
3787
  """
3844
3788
  Stdout of the program run
3845
3789
  """
3846
- stderr: Annotated[Optional[str], Field(title='Stderr')] = None
3790
+ stderr: Annotated[str | None, Field(title='Stderr')] = None
3847
3791
  """
3848
3792
  Stderr of the program run
3849
3793
  """
3850
- error: Annotated[Optional[str], Field(title='Error')] = None
3794
+ error: Annotated[str | None, Field(title='Error')] = None
3851
3795
  """
3852
3796
  Error message of the program run, if any
3853
3797
  """
3854
- traceback: Annotated[Optional[str], Field(title='Traceback')] = None
3798
+ traceback: Annotated[str | None, Field(title='Traceback')] = None
3855
3799
  """
3856
3800
  Traceback of the program run, if any
3857
3801
  """
3858
- start_time: Annotated[Optional[AwareDatetime], Field(title='Start Time')] = None
3802
+ start_time: Annotated[AwareDatetime | None, Field(title='Start Time')] = None
3859
3803
  """
3860
3804
  Start time of the program run in RFC3339 format
3861
3805
  """
3862
- end_time: Annotated[Optional[AwareDatetime], Field(title='End Time')] = None
3806
+ end_time: Annotated[AwareDatetime | None, Field(title='End Time')] = None
3863
3807
  """
3864
3808
  End time of the program run in RFC3339 format
3865
3809
  """
3866
- input_data: Annotated[Optional[Dict[str, Any]], Field(title='Input Data')] = None
3810
+ input_data: Annotated[dict[str, Any] | None, Field(title='Input Data')] = None
3867
3811
  """
3868
3812
  Input data of the program run
3869
3813
  """
@@ -3874,13 +3818,13 @@ class ValidationError2(BaseModel):
3874
3818
  A validation error of a program.
3875
3819
  """
3876
3820
 
3877
- loc: Annotated[List[int], Field(title='Location')]
3821
+ loc: Annotated[list[int], Field(title='Location')]
3878
3822
  msg: Annotated[str, Field(title='Message')]
3879
3823
  type: Annotated[str, Field(title='Error Type')]
3880
3824
 
3881
3825
 
3882
3826
  class HTTPValidationError(BaseModel):
3883
- detail: Annotated[Optional[List[ValidationError2]], Field(title='Detail')] = None
3827
+ detail: Annotated[list[ValidationError2] | None, Field(title='Detail')] = None
3884
3828
 
3885
3829
 
3886
3830
  class MotionGroupInfo(BaseModel):
@@ -3902,7 +3846,7 @@ class MotionGroupInfo(BaseModel):
3902
3846
 
3903
3847
 
3904
3848
  class MotionGroupInfos(RootModel):
3905
- root: List[MotionGroupInfo]
3849
+ root: list[MotionGroupInfo]
3906
3850
 
3907
3851
  def __getitem__(self, index: int) -> MotionGroupInfo:
3908
3852
  """
@@ -3935,22 +3879,22 @@ class MotionGroupJoints(BaseModel):
3935
3879
  Everything but positions is optional.
3936
3880
  """
3937
3881
 
3938
- positions: List[float]
3882
+ positions: list[float]
3939
3883
  """
3940
3884
  The joint positions of the motion group.
3941
3885
 
3942
3886
  """
3943
- velocities: Optional[List[float]] = None
3887
+ velocities: list[float] | None = None
3944
3888
  """
3945
3889
  The joint velocities of the motion group.
3946
3890
 
3947
3891
  """
3948
- accelerations: Optional[List[float]] = None
3892
+ accelerations: list[float] | None = None
3949
3893
  """
3950
3894
  The joint accelerations of the motion group.
3951
3895
 
3952
3896
  """
3953
- torques: Optional[List[float]] = None
3897
+ torques: list[float] | None = None
3954
3898
  """
3955
3899
  The joint torques of the motion group.
3956
3900
 
@@ -3958,13 +3902,13 @@ class MotionGroupJoints(BaseModel):
3958
3902
 
3959
3903
 
3960
3904
  class RobotTcpData(BaseModel):
3961
- name: Optional[str] = None
3905
+ name: str | None = None
3962
3906
  """
3963
3907
  A readable and changeable name for frontend visualization.
3964
3908
  """
3965
3909
  position: Vector3d
3966
- orientation: Optional[Orientation] = None
3967
- orientation_type: Optional[OrientationType] = 'ROTATION_VECTOR'
3910
+ orientation: Orientation | None = None
3911
+ orientation_type: OrientationType | None = 'ROTATION_VECTOR'
3968
3912
 
3969
3913
 
3970
3914
  class RobotTcp(RobotTcpData):
@@ -3976,7 +3920,7 @@ class RobotTcp(RobotTcpData):
3976
3920
 
3977
3921
  class RobotTcps(RootModel):
3978
3922
  root: Annotated[
3979
- List[RobotTcp],
3923
+ list[RobotTcp],
3980
3924
  Field(
3981
3925
  examples=[
3982
3926
  [
@@ -4082,7 +4026,7 @@ class ExternalJointStreamDatapoint(BaseModel):
4082
4026
 
4083
4027
 
4084
4028
  class ExternalJointStreamDatapoints(RootModel):
4085
- root: List[ExternalJointStreamDatapoint]
4029
+ root: list[ExternalJointStreamDatapoint]
4086
4030
 
4087
4031
  def __getitem__(self, index: int) -> ExternalJointStreamDatapoint:
4088
4032
  """
@@ -4128,7 +4072,7 @@ class MetadataObject(RootModel):
4128
4072
  A metadata object.
4129
4073
  """
4130
4074
 
4131
- root: Dict[str, str]
4075
+ root: dict[str, str]
4132
4076
 
4133
4077
 
4134
4078
  class BinaryObject(RootModel):
@@ -4151,13 +4095,13 @@ class BusIODescription(BaseModel):
4151
4095
  """
4152
4096
  direction: IODirection
4153
4097
  value_type: IOValueType
4154
- unit: Optional[UnitType] = None
4155
- min: Optional[IOBoundary] = None
4156
- max: Optional[IOBoundary] = None
4098
+ unit: UnitType | None = None
4099
+ min: IOBoundary | None = None
4100
+ max: IOBoundary | None = None
4157
4101
 
4158
4102
 
4159
4103
  class ListBusIODescriptionsResponse(RootModel):
4160
- root: List[BusIODescription]
4104
+ root: list[BusIODescription]
4161
4105
 
4162
4106
  def __getitem__(self, index: int) -> BusIODescription:
4163
4107
  """
@@ -4198,7 +4142,7 @@ class BusIOsStateEnum(Enum):
4198
4142
 
4199
4143
  class BusIOsState(BaseModel):
4200
4144
  state: BusIOsStateEnum
4201
- message: Optional[str] = None
4145
+ message: str | None = None
4202
4146
  """
4203
4147
  A message providing additional information on the input/output service, e.g., BUS service status, encountered errors.
4204
4148
  May be empty if no additional information is available.
@@ -4246,7 +4190,7 @@ class ProfinetSlotDescription(BaseModel):
4246
4190
  The API identifies the application relation (AR) that is using the slot.
4247
4191
 
4248
4192
  """
4249
- subslots: List[ProfinetSubSlotDescription]
4193
+ subslots: list[ProfinetSubSlotDescription]
4250
4194
  """
4251
4195
  An array of PROFINET subslots.
4252
4196
 
@@ -4264,14 +4208,14 @@ class ProfinetDescription(BaseModel):
4264
4208
  The device identifier of the PROFINET device, identifying the specific device within the vendor's range.
4265
4209
 
4266
4210
  """
4267
- slots: Optional[List[ProfinetSlotDescription]] = None
4268
- device_name: Annotated[Optional[str], Field(examples=['pnDevice'])] = None
4211
+ slots: list[ProfinetSlotDescription] | None = None
4212
+ device_name: Annotated[str | None, Field(examples=['pnDevice'])] = None
4269
4213
  """
4270
4214
  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
4215
  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
4216
 
4273
4217
  """
4274
- ip_config: Optional[BusIOProfinetIpConfig] = None
4218
+ ip_config: BusIOProfinetIpConfig | None = None
4275
4219
 
4276
4220
 
4277
4221
  class ProfinetIOTypeEnum(Enum):
@@ -4320,7 +4264,7 @@ class ProfinetIOData(BaseModel):
4320
4264
  The byte address is used to locate the specific input/output variable within the device's memory or data structure.
4321
4265
 
4322
4266
  """
4323
- bit_address: Annotated[Optional[int], Field(ge=0, le=7)] = None
4267
+ bit_address: Annotated[int | None, Field(ge=0, le=7)] = None
4324
4268
  """
4325
4269
  The bit address of the input/output variable within the byte or word address.
4326
4270
  The bit address is used to specify the exact bit within the byte or word that corresponds to the input/output variable.
@@ -4342,7 +4286,7 @@ class ProfinetIOs(RootModel):
4342
4286
  Array of PROFINET input/output variable configurations.
4343
4287
  """
4344
4288
 
4345
- root: List[ProfinetIO]
4289
+ root: list[ProfinetIO]
4346
4290
  """
4347
4291
  Array of PROFINET input/output variable configurations.
4348
4292
  """
@@ -4473,7 +4417,7 @@ class ModbusIOs(RootModel):
4473
4417
  Array of MODBUS input/output variable configurations.
4474
4418
  """
4475
4419
 
4476
- root: List[ModbusIO]
4420
+ root: list[ModbusIO]
4477
4421
  """
4478
4422
  Array of MODBUS input/output variable configurations.
4479
4423
  """
@@ -4520,7 +4464,7 @@ class ConfigurationResource(BaseModel):
4520
4464
  """
4521
4465
  Human-readable name of the configuration resource.
4522
4466
  """
4523
- children: Optional[ConfigurationResourceArray] = None
4467
+ children: ConfigurationResourceArray | None = None
4524
4468
 
4525
4469
 
4526
4470
  class ConfigurationResourceArray(RootModel):
@@ -4528,7 +4472,7 @@ class ConfigurationResourceArray(RootModel):
4528
4472
  Array of configuration resources.
4529
4473
  """
4530
4474
 
4531
- root: List[ConfigurationResource]
4475
+ root: list[ConfigurationResource]
4532
4476
  """
4533
4477
  Array of configuration resources.
4534
4478
  """