zaber-motion 7.10.0__py3-none-win32.whl → 7.12.0__py3-none-win32.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 (61) hide show
  1. zaber_motion/__init__.py +2 -0
  2. zaber_motion/ascii/all_axes.py +1 -1
  3. zaber_motion/ascii/axis.py +5 -5
  4. zaber_motion/ascii/axis_group.py +1 -1
  5. zaber_motion/ascii/axis_settings.py +5 -5
  6. zaber_motion/ascii/connection.py +1 -1
  7. zaber_motion/ascii/device.py +11 -11
  8. zaber_motion/ascii/device_io.py +1 -1
  9. zaber_motion/ascii/device_settings.py +1 -1
  10. zaber_motion/ascii/lockstep.py +2 -2
  11. zaber_motion/ascii/oscilloscope.py +1 -1
  12. zaber_motion/ascii/oscilloscope_data.py +1 -1
  13. zaber_motion/ascii/pvt.py +1 -1
  14. zaber_motion/ascii/pvt_buffer.py +43 -2
  15. zaber_motion/ascii/pvt_io.py +2 -2
  16. zaber_motion/ascii/pvt_sequence.py +153 -5
  17. zaber_motion/ascii/servo_tuner.py +1 -1
  18. zaber_motion/ascii/storage.py +2 -2
  19. zaber_motion/ascii/stream.py +3 -3
  20. zaber_motion/ascii/stream_buffer.py +2 -2
  21. zaber_motion/ascii/stream_io.py +2 -2
  22. zaber_motion/ascii/streams.py +1 -1
  23. zaber_motion/ascii/transport.py +1 -1
  24. zaber_motion/ascii/trigger.py +2 -2
  25. zaber_motion/ascii/triggers.py +1 -1
  26. zaber_motion/ascii/warnings.py +2 -2
  27. zaber_motion/binary/connection.py +1 -1
  28. zaber_motion/binary/device.py +3 -3
  29. zaber_motion/binary/device_settings.py +1 -1
  30. zaber_motion/dto/__init__.py +1 -0
  31. zaber_motion/dto/device_db_source.py +66 -0
  32. zaber_motion/dto/exceptions/__init__.py +1 -0
  33. zaber_motion/dto/exceptions/device_db_failed_exception_data.py +24 -1
  34. zaber_motion/dto/exceptions/device_db_inner_error.py +85 -0
  35. zaber_motion/dto/requests/__init__.py +4 -0
  36. zaber_motion/dto/requests/pvt_buffer_get_sequence_data_request.py +79 -0
  37. zaber_motion/dto/requests/pvt_generate_velocities_and_times_request.py +96 -0
  38. zaber_motion/dto/requests/pvt_submit_sequence_data_request.py +93 -0
  39. zaber_motion/dto/requests/set_device_db_layered_sources_request.py +56 -0
  40. zaber_motion/dto/requests/set_device_db_source_request.py +6 -0
  41. zaber_motion/exceptions/__init__.py +1 -0
  42. zaber_motion/gcode/offline_translator.py +1 -1
  43. zaber_motion/gcode/translator.py +1 -1
  44. zaber_motion/library.py +18 -1
  45. zaber_motion/microscopy/autofocus.py +3 -3
  46. zaber_motion/microscopy/camera_trigger.py +2 -2
  47. zaber_motion/microscopy/filter_changer.py +1 -1
  48. zaber_motion/microscopy/illuminator.py +2 -2
  49. zaber_motion/microscopy/illuminator_channel.py +6 -6
  50. zaber_motion/microscopy/microscope.py +74 -24
  51. zaber_motion/microscopy/objective_changer.py +2 -2
  52. zaber_motion/microscopy/wdi_autofocus_provider.py +1 -1
  53. zaber_motion/product/process.py +6 -6
  54. zaber_motion/product/process_controller.py +1 -1
  55. zaber_motion/version.py +1 -1
  56. {zaber_motion-7.10.0.dist-info → zaber_motion-7.12.0.dist-info}/METADATA +1 -1
  57. {zaber_motion-7.10.0.dist-info → zaber_motion-7.12.0.dist-info}/RECORD +61 -55
  58. zaber_motion_bindings/zaber-motion-core-windows-386.dll +0 -0
  59. {zaber_motion-7.10.0.dist-info → zaber_motion-7.12.0.dist-info}/LICENSE.txt +0 -0
  60. {zaber_motion-7.10.0.dist-info → zaber_motion-7.12.0.dist-info}/WHEEL +0 -0
  61. {zaber_motion-7.10.0.dist-info → zaber_motion-7.12.0.dist-info}/top_level.txt +0 -0
zaber_motion/__init__.py CHANGED
@@ -9,6 +9,7 @@ from .tools import Tools as Tools
9
9
  from .unit_table import UnitTable as UnitTable
10
10
  from .dto.axis_address import AxisAddress as AxisAddress
11
11
  from .dto.channel_address import ChannelAddress as ChannelAddress
12
+ from .dto.device_db_source import DeviceDbSource as DeviceDbSource
12
13
  from .dto.device_db_source_type import DeviceDbSourceType as DeviceDbSourceType
13
14
  from .dto.firmware_version import FirmwareVersion as FirmwareVersion
14
15
  from .dto.log_output_mode import LogOutputMode as LogOutputMode
@@ -83,6 +84,7 @@ from .dto.exceptions.command_failed_exception_data import CommandFailedException
83
84
  from .dto.exceptions.command_too_long_exception_data import CommandTooLongExceptionData as CommandTooLongExceptionData
84
85
  from .dto.exceptions.device_address_conflict_exception_data import DeviceAddressConflictExceptionData as DeviceAddressConflictExceptionData
85
86
  from .dto.exceptions.device_db_failed_exception_data import DeviceDbFailedExceptionData as DeviceDbFailedExceptionData
87
+ from .dto.exceptions.device_db_inner_error import DeviceDbInnerError as DeviceDbInnerError
86
88
  from .dto.exceptions.g_code_execution_exception_data import GCodeExecutionExceptionData as GCodeExecutionExceptionData
87
89
  from .dto.exceptions.g_code_syntax_exception_data import GCodeSyntaxExceptionData as GCodeSyntaxExceptionData
88
90
  from .dto.exceptions.invalid_packet_exception_data import InvalidPacketExceptionData as InvalidPacketExceptionData
@@ -23,7 +23,7 @@ class AllAxes:
23
23
  return self._device
24
24
 
25
25
  def __init__(self, device: 'Device'):
26
- self._device = device
26
+ self._device: 'Device' = device
27
27
 
28
28
  def home(
29
29
  self,
@@ -112,11 +112,11 @@ class Axis:
112
112
  return self.__retrieve_label()
113
113
 
114
114
  def __init__(self, device: 'Device', axis_number: int):
115
- self._device = device
116
- self._axis_number = axis_number
117
- self._settings = AxisSettings(self)
118
- self._storage = AxisStorage(self)
119
- self._warnings = Warnings(device, axis_number)
115
+ self._device: 'Device' = device
116
+ self._axis_number: int = axis_number
117
+ self._settings: AxisSettings = AxisSettings(self)
118
+ self._storage: AxisStorage = AxisStorage(self)
119
+ self._warnings: Warnings = Warnings(device, axis_number)
120
120
 
121
121
  def home(
122
122
  self,
@@ -30,7 +30,7 @@ class AxisGroup:
30
30
  """
31
31
  Initializes the group with the axes to be controlled.
32
32
  """
33
- self._axes = axes.copy()
33
+ self._axes: List[Axis] = axes.copy()
34
34
 
35
35
  def home(
36
36
  self
@@ -20,7 +20,7 @@ class AxisSettings:
20
20
  """
21
21
 
22
22
  def __init__(self, axis: 'Axis'):
23
- self._axis = axis
23
+ self._axis: 'Axis' = axis
24
24
 
25
25
  def get(
26
26
  self,
@@ -669,7 +669,7 @@ class AxisSettings:
669
669
  axis_settings=list(axis_settings),
670
670
  )
671
671
  response = call(
672
- "device/get_many_settings",
672
+ "device/get_many_axis_settings",
673
673
  request,
674
674
  dto.GetAxisSettingResults.from_binary)
675
675
  return response.results
@@ -694,7 +694,7 @@ class AxisSettings:
694
694
  axis_settings=list(axis_settings),
695
695
  )
696
696
  response = await call_async(
697
- "device/get_many_settings",
697
+ "device/get_many_axis_settings",
698
698
  request,
699
699
  dto.GetAxisSettingResults.from_binary)
700
700
  return response.results
@@ -720,7 +720,7 @@ class AxisSettings:
720
720
  axis_settings=list(axis_settings),
721
721
  )
722
722
  response = call(
723
- "device/get_sync_settings",
723
+ "device/get_sync_axis_settings",
724
724
  request,
725
725
  dto.GetAxisSettingResults.from_binary)
726
726
  return response.results
@@ -746,7 +746,7 @@ class AxisSettings:
746
746
  axis_settings=list(axis_settings),
747
747
  )
748
748
  response = await call_async(
749
- "device/get_sync_settings",
749
+ "device/get_sync_axis_settings",
750
750
  request,
751
751
  dto.GetAxisSettingResults.from_binary)
752
752
  return response.results
@@ -123,7 +123,7 @@ class Connection:
123
123
  return self.__retrieve_is_open()
124
124
 
125
125
  def __init__(self, interface_id: int):
126
- self._interface_id = interface_id
126
+ self._interface_id: int = interface_id
127
127
  self.__setup_events(0)
128
128
 
129
129
  @staticmethod
@@ -180,17 +180,17 @@ class Device:
180
180
  return self._pvt
181
181
 
182
182
  def __init__(self, connection: 'Connection', device_address: int):
183
- self._connection = connection
184
- self._device_address = device_address
185
- self._settings = DeviceSettings(self)
186
- self._storage = DeviceStorage(self)
187
- self._io = DeviceIO(self)
188
- self._all_axes = AllAxes(self)
189
- self._warnings = Warnings(self, 0)
190
- self._oscilloscope = Oscilloscope(self)
191
- self._triggers = Triggers(self)
192
- self._streams = Streams(self)
193
- self._pvt = Pvt(self)
183
+ self._connection: 'Connection' = connection
184
+ self._device_address: int = device_address
185
+ self._settings: DeviceSettings = DeviceSettings(self)
186
+ self._storage: DeviceStorage = DeviceStorage(self)
187
+ self._io: DeviceIO = DeviceIO(self)
188
+ self._all_axes: AllAxes = AllAxes(self)
189
+ self._warnings: Warnings = Warnings(self, 0)
190
+ self._oscilloscope: Oscilloscope = Oscilloscope(self)
191
+ self._triggers: Triggers = Triggers(self)
192
+ self._streams: Streams = Streams(self)
193
+ self._pvt: Pvt = Pvt(self)
194
194
 
195
195
  def identify(
196
196
  self,
@@ -21,7 +21,7 @@ class DeviceIO:
21
21
  """
22
22
 
23
23
  def __init__(self, device: 'Device'):
24
- self._device = device
24
+ self._device: 'Device' = device
25
25
 
26
26
  def get_channels_info(
27
27
  self
@@ -20,7 +20,7 @@ class DeviceSettings:
20
20
  """
21
21
 
22
22
  def __init__(self, device: 'Device'):
23
- self._device = device
23
+ self._device: 'Device' = device
24
24
 
25
25
  def get(
26
26
  self,
@@ -32,8 +32,8 @@ class Lockstep:
32
32
  return self._lockstep_group_id
33
33
 
34
34
  def __init__(self, device: 'Device', lockstep_group_id: int):
35
- self._device = device
36
- self._lockstep_group_id = lockstep_group_id
35
+ self._device: 'Device' = device
36
+ self._lockstep_group_id: int = lockstep_group_id
37
37
 
38
38
  def enable(
39
39
  self,
@@ -26,7 +26,7 @@ class Oscilloscope:
26
26
  return self._device
27
27
 
28
28
  def __init__(self, device: 'Device'):
29
- self._device = device
29
+ self._device: 'Device' = device
30
30
 
31
31
  def add_channel(
32
32
  self,
@@ -57,7 +57,7 @@ class OscilloscopeData:
57
57
  return self.__retrieve_properties().io_channel
58
58
 
59
59
  def __init__(self, data_id: int):
60
- self._data_id = data_id
60
+ self._data_id: int = data_id
61
61
 
62
62
  def get_timebase(
63
63
  self,
zaber_motion/ascii/pvt.py CHANGED
@@ -26,7 +26,7 @@ class Pvt:
26
26
  return self._device
27
27
 
28
28
  def __init__(self, device: 'Device'):
29
- self._device = device
29
+ self._device: 'Device' = device
30
30
 
31
31
  def get_sequence(
32
32
  self,
@@ -1,6 +1,7 @@
1
1
  # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
2
  # ============== DO NOT EDIT DIRECTLY ============== #
3
3
  from typing import TYPE_CHECKING, List
4
+ from ..dto.ascii.pvt_sequence_data import PvtSequenceData
4
5
  from ..dto import requests as dto
5
6
  from ..call import call, call_async
6
7
 
@@ -29,8 +30,8 @@ class PvtBuffer:
29
30
  return self._buffer_id
30
31
 
31
32
  def __init__(self, device: 'Device', buffer_id: int):
32
- self._device = device
33
- self._buffer_id = buffer_id
33
+ self._device: 'Device' = device
34
+ self._buffer_id: int = buffer_id
34
35
 
35
36
  def get_content(
36
37
  self
@@ -74,6 +75,46 @@ class PvtBuffer:
74
75
  dto.StreamBufferGetContentResponse.from_binary)
75
76
  return response.buffer_lines
76
77
 
78
+ def retrieve_sequence_data(
79
+ self
80
+ ) -> PvtSequenceData:
81
+ """
82
+ Gets the buffer contents as a PvtSequenceData object.
83
+
84
+ Returns:
85
+ The PVT data loaded from the buffer.
86
+ """
87
+ request = dto.PvtBufferGetSequenceDataRequest(
88
+ interface_id=self.device.connection.interface_id,
89
+ device=self.device.device_address,
90
+ buffer_id=self.buffer_id,
91
+ )
92
+ response = call(
93
+ "device/pvt_buffer_get_data",
94
+ request,
95
+ PvtSequenceData.from_binary)
96
+ return response
97
+
98
+ async def retrieve_sequence_data_async(
99
+ self
100
+ ) -> PvtSequenceData:
101
+ """
102
+ Gets the buffer contents as a PvtSequenceData object.
103
+
104
+ Returns:
105
+ The PVT data loaded from the buffer.
106
+ """
107
+ request = dto.PvtBufferGetSequenceDataRequest(
108
+ interface_id=self.device.connection.interface_id,
109
+ device=self.device.device_address,
110
+ buffer_id=self.buffer_id,
111
+ )
112
+ response = await call_async(
113
+ "device/pvt_buffer_get_data",
114
+ request,
115
+ PvtSequenceData.from_binary)
116
+ return response
117
+
77
118
  def erase(
78
119
  self
79
120
  ) -> None:
@@ -18,8 +18,8 @@ class PvtIo:
18
18
  """
19
19
 
20
20
  def __init__(self, device: 'Device', stream_id: int):
21
- self._device = device
22
- self._stream_id = stream_id
21
+ self._device: 'Device' = device
22
+ self._stream_id: int = stream_id
23
23
 
24
24
  def set_digital_output(
25
25
  self,
@@ -66,9 +66,9 @@ class PvtSequence:
66
66
  return self._io
67
67
 
68
68
  def __init__(self, device: 'Device', pvt_id: int):
69
- self._device = device
70
- self._pvt_id = pvt_id
71
- self._io = PvtIo(device, pvt_id)
69
+ self._device: 'Device' = device
70
+ self._pvt_id: int = pvt_id
71
+ self._io: PvtIo = PvtIo(device, pvt_id)
72
72
 
73
73
  def setup_live_composite(
74
74
  self,
@@ -525,6 +525,8 @@ class PvtSequence:
525
525
  per axis, And the values arrays for each sequence must be equal in length to each other and also to the
526
526
  times sequence.
527
527
 
528
+ Does not support native units.
529
+
528
530
  Args:
529
531
  positions: Positions for the axes to move through, relative to their home positions.
530
532
  Each MeasurementSequence represents a sequence of positions along a particular dimension.
@@ -569,6 +571,8 @@ class PvtSequence:
569
571
  per axis, And the values arrays for each sequence must be equal in length to each other and also to the
570
572
  times sequence.
571
573
 
574
+ Does not support native units.
575
+
572
576
  Args:
573
577
  positions: Positions for the axes to move through, relative to their home positions.
574
578
  Each MeasurementSequence represents a sequence of positions along a particular dimension.
@@ -610,6 +614,8 @@ class PvtSequence:
610
614
  velocity measurement sequence per axis, and the values arrays for each sequence
611
615
  must be equal in length to each other and also to the times sequence.
612
616
 
617
+ Does not support native units.
618
+
613
619
  Args:
614
620
  velocities: The sequence of velocities for each axis.
615
621
  Each MeasurementSequence represents a sequence of velocities along particular dimension.
@@ -647,6 +653,8 @@ class PvtSequence:
647
653
  velocity measurement sequence per axis, and the values arrays for each sequence
648
654
  must be equal in length to each other and also to the times sequence.
649
655
 
656
+ Does not support native units.
657
+
650
658
  Args:
651
659
  velocities: The sequence of velocities for each axis.
652
660
  Each MeasurementSequence represents a sequence of velocities along particular dimension.
@@ -670,6 +678,108 @@ class PvtSequence:
670
678
  PvtSequenceData.from_binary)
671
679
  return response
672
680
 
681
+ @staticmethod
682
+ def generate_velocities_and_times(
683
+ positions: List[MeasurementSequence],
684
+ target_speed: Measurement,
685
+ target_acceleration: Measurement,
686
+ resample_number: Optional[int] = None
687
+ ) -> PvtSequenceData:
688
+ """
689
+ Generates sequences of velocities and times for a sequence of positions.
690
+ This function fits a geometric spline (not-a-knot cubic for sequences of >3 points,
691
+ natural cubic for 3, and a straight line for 2) over the position sequence
692
+ and then calculates the velocity and time information by traversing it using a
693
+ trapezoidal motion profile.
694
+
695
+ This generation scheme attempts to keep speed and acceleration less than the
696
+ specified target values, but does not guarantee it. Generally speaking, a higher
697
+ resample number will bring the generated trajectory closer to respecting these
698
+ limits.
699
+
700
+ Note that consecutive duplicate points will be automatically removed as they
701
+ have no geometric significance without additional time information. Also note that
702
+ for multi-dimensional paths this function expects axes to be linear and orthogonal,
703
+ however for paths of a single dimension rotary units are accepted.
704
+
705
+ Does not support native units.
706
+
707
+ Args:
708
+ positions: Positions for the axes to move through, relative to their home positions.
709
+ target_speed: The target speed used to generate positions and times.
710
+ target_acceleration: The target acceleration used to generate positions and times.
711
+ resample_number: The number of points to resample the sequence by.
712
+ Leave undefined to use the specified points.
713
+
714
+ Returns:
715
+ Object containing the generated PVT sequence. Note that returned time sequence is always relative.
716
+ """
717
+ if target_speed.value <= 0 or target_acceleration.value <= 0:
718
+ raise ValueError('Target speed and acceleration values must be greater than zero.')
719
+
720
+ request = dto.PvtGenerateVelocitiesAndTimesRequest(
721
+ positions=positions,
722
+ target_speed=target_speed,
723
+ target_acceleration=target_acceleration,
724
+ resample_number=resample_number,
725
+ )
726
+ response = call(
727
+ "device/pvt_generate_velocities_and_times",
728
+ request,
729
+ PvtSequenceData.from_binary)
730
+ return response
731
+
732
+ @staticmethod
733
+ async def generate_velocities_and_times_async(
734
+ positions: List[MeasurementSequence],
735
+ target_speed: Measurement,
736
+ target_acceleration: Measurement,
737
+ resample_number: Optional[int] = None
738
+ ) -> PvtSequenceData:
739
+ """
740
+ Generates sequences of velocities and times for a sequence of positions.
741
+ This function fits a geometric spline (not-a-knot cubic for sequences of >3 points,
742
+ natural cubic for 3, and a straight line for 2) over the position sequence
743
+ and then calculates the velocity and time information by traversing it using a
744
+ trapezoidal motion profile.
745
+
746
+ This generation scheme attempts to keep speed and acceleration less than the
747
+ specified target values, but does not guarantee it. Generally speaking, a higher
748
+ resample number will bring the generated trajectory closer to respecting these
749
+ limits.
750
+
751
+ Note that consecutive duplicate points will be automatically removed as they
752
+ have no geometric significance without additional time information. Also note that
753
+ for multi-dimensional paths this function expects axes to be linear and orthogonal,
754
+ however for paths of a single dimension rotary units are accepted.
755
+
756
+ Does not support native units.
757
+
758
+ Args:
759
+ positions: Positions for the axes to move through, relative to their home positions.
760
+ target_speed: The target speed used to generate positions and times.
761
+ target_acceleration: The target acceleration used to generate positions and times.
762
+ resample_number: The number of points to resample the sequence by.
763
+ Leave undefined to use the specified points.
764
+
765
+ Returns:
766
+ Object containing the generated PVT sequence. Note that returned time sequence is always relative.
767
+ """
768
+ if target_speed.value <= 0 or target_acceleration.value <= 0:
769
+ raise ValueError('Target speed and acceleration values must be greater than zero.')
770
+
771
+ request = dto.PvtGenerateVelocitiesAndTimesRequest(
772
+ positions=positions,
773
+ target_speed=target_speed,
774
+ target_acceleration=target_acceleration,
775
+ resample_number=resample_number,
776
+ )
777
+ response = await call_async(
778
+ "device/pvt_generate_velocities_and_times",
779
+ request,
780
+ PvtSequenceData.from_binary)
781
+ return response
782
+
673
783
  def wait_until_idle(
674
784
  self,
675
785
  throw_error_on_fault: bool = True
@@ -1144,11 +1254,12 @@ class PvtSequence:
1144
1254
 
1145
1255
  Units must be wrapped in parens or square braces: ie. (µm/s), [µm/s].
1146
1256
  Additionally, native units are the default if no units are specified.
1257
+ Time values default to milliseconds if no units are provided.
1147
1258
  If no header is included, then column order is assumed to be "T,P1,V1,P2,V2,...".
1148
1259
  In this case the number of columns must be odd.
1149
1260
 
1150
1261
  Args:
1151
- path: The path from which the csv file will be loaded.
1262
+ path: The path to the csv file to load.
1152
1263
 
1153
1264
  Returns:
1154
1265
  The PVT csv data loaded from the file.
@@ -1183,11 +1294,12 @@ class PvtSequence:
1183
1294
 
1184
1295
  Units must be wrapped in parens or square braces: ie. (µm/s), [µm/s].
1185
1296
  Additionally, native units are the default if no units are specified.
1297
+ Time values default to milliseconds if no units are provided.
1186
1298
  If no header is included, then column order is assumed to be "T,P1,V1,P2,V2,...".
1187
1299
  In this case the number of columns must be odd.
1188
1300
 
1189
1301
  Args:
1190
- path: The path from which the csv file will be loaded.
1302
+ path: The path to the csv file to load.
1191
1303
 
1192
1304
  Returns:
1193
1305
  The PVT csv data loaded from the file.
@@ -1201,6 +1313,42 @@ class PvtSequence:
1201
1313
  PvtCsvData.from_binary)
1202
1314
  return response
1203
1315
 
1316
+ def submit_sequence_data(
1317
+ self,
1318
+ sequence_data: PvtSequenceData
1319
+ ) -> None:
1320
+ """
1321
+ Writes the contents of a PvtSequenceData object to the sequence.
1322
+
1323
+ Args:
1324
+ sequence_data: The PVT sequence data to submit.
1325
+ """
1326
+ request = dto.PvtSubmitSequenceDataRequest(
1327
+ interface_id=self.device.connection.interface_id,
1328
+ device=self.device.device_address,
1329
+ stream_id=self.pvt_id,
1330
+ sequence_data=sequence_data,
1331
+ )
1332
+ call("device/stream_pvt_submit_data", request)
1333
+
1334
+ async def submit_sequence_data_async(
1335
+ self,
1336
+ sequence_data: PvtSequenceData
1337
+ ) -> None:
1338
+ """
1339
+ Writes the contents of a PvtSequenceData object to the sequence.
1340
+
1341
+ Args:
1342
+ sequence_data: The PVT sequence data to submit.
1343
+ """
1344
+ request = dto.PvtSubmitSequenceDataRequest(
1345
+ interface_id=self.device.connection.interface_id,
1346
+ device=self.device.device_address,
1347
+ stream_id=self.pvt_id,
1348
+ sequence_data=sequence_data,
1349
+ )
1350
+ await call_async("device/stream_pvt_submit_data", request)
1351
+
1204
1352
  def set_digital_output(
1205
1353
  self,
1206
1354
  channel_number: int,
@@ -32,7 +32,7 @@ class ServoTuner:
32
32
  """
33
33
  Creates instance of ServoTuner for the given axis.
34
34
  """
35
- self._axis = axis
35
+ self._axis: Axis = axis
36
36
 
37
37
  def get_startup_paramset(
38
38
  self
@@ -18,7 +18,7 @@ class AxisStorage:
18
18
  """
19
19
 
20
20
  def __init__(self, axis: 'Axis'):
21
- self._axis = axis
21
+ self._axis: 'Axis' = axis
22
22
 
23
23
  def set_string(
24
24
  self,
@@ -474,7 +474,7 @@ class DeviceStorage:
474
474
  """
475
475
 
476
476
  def __init__(self, device: 'Device'):
477
- self._device = device
477
+ self._device: 'Device' = device
478
478
 
479
479
  def set_string(
480
480
  self,
@@ -61,9 +61,9 @@ class Stream:
61
61
  return self._io
62
62
 
63
63
  def __init__(self, device: 'Device', stream_id: int):
64
- self._device = device
65
- self._stream_id = stream_id
66
- self._io = StreamIo(device, stream_id)
64
+ self._device: 'Device' = device
65
+ self._stream_id: int = stream_id
66
+ self._io: StreamIo = StreamIo(device, stream_id)
67
67
 
68
68
  def setup_live_composite(
69
69
  self,
@@ -29,8 +29,8 @@ class StreamBuffer:
29
29
  return self._buffer_id
30
30
 
31
31
  def __init__(self, device: 'Device', buffer_id: int):
32
- self._device = device
33
- self._buffer_id = buffer_id
32
+ self._device: 'Device' = device
33
+ self._buffer_id: int = buffer_id
34
34
 
35
35
  def get_content(
36
36
  self
@@ -18,8 +18,8 @@ class StreamIo:
18
18
  """
19
19
 
20
20
  def __init__(self, device: 'Device', stream_id: int):
21
- self._device = device
22
- self._stream_id = stream_id
21
+ self._device: 'Device' = device
22
+ self._stream_id: int = stream_id
23
23
 
24
24
  def set_digital_output(
25
25
  self,
@@ -26,7 +26,7 @@ class Streams:
26
26
  return self._device
27
27
 
28
28
  def __init__(self, device: 'Device'):
29
- self._device = device
29
+ self._device: 'Device' = device
30
30
 
31
31
  def get_stream(
32
32
  self,
@@ -22,7 +22,7 @@ class Transport:
22
22
  return self._transport_id
23
23
 
24
24
  def __init__(self, transport_id: int):
25
- self._transport_id = transport_id
25
+ self._transport_id: int = transport_id
26
26
 
27
27
  @staticmethod
28
28
  def open() -> 'Transport':
@@ -38,8 +38,8 @@ class Trigger:
38
38
  return self._trigger_number
39
39
 
40
40
  def __init__(self, device: 'Device', trigger_number: int):
41
- self._device = device
42
- self._trigger_number = trigger_number
41
+ self._device: 'Device' = device
42
+ self._trigger_number: int = trigger_number
43
43
 
44
44
  def enable(
45
45
  self,
@@ -26,7 +26,7 @@ class Triggers:
26
26
  return self._device
27
27
 
28
28
  def __init__(self, device: 'Device'):
29
- self._device = device
29
+ self._device: 'Device' = device
30
30
 
31
31
  def get_number_of_triggers(
32
32
  self
@@ -16,8 +16,8 @@ class Warnings:
16
16
  """
17
17
 
18
18
  def __init__(self, device: 'Device', axis_number: int):
19
- self._device = device
20
- self._axis_number = axis_number
19
+ self._device: 'Device' = device
20
+ self._axis_number: int = axis_number
21
21
 
22
22
  def get_flags(
23
23
  self
@@ -75,7 +75,7 @@ class Connection:
75
75
  return self.__retrieve_is_open()
76
76
 
77
77
  def __init__(self, interface_id: int):
78
- self._interface_id = interface_id
78
+ self._interface_id: int = interface_id
79
79
  self.__setup_events()
80
80
 
81
81
  @staticmethod
@@ -124,9 +124,9 @@ class Device:
124
124
  return self.identity.device_type
125
125
 
126
126
  def __init__(self, connection: 'Connection', device_address: int):
127
- self._connection = connection
128
- self._settings = DeviceSettings(self)
129
- self._device_address = device_address
127
+ self._connection: 'Connection' = connection
128
+ self._settings: DeviceSettings = DeviceSettings(self)
129
+ self._device_address: int = device_address
130
130
 
131
131
  def generic_command(
132
132
  self,
@@ -18,7 +18,7 @@ class DeviceSettings:
18
18
  """
19
19
 
20
20
  def __init__(self, device: 'Device'):
21
- self._device = device
21
+ self._device: 'Device' = device
22
22
 
23
23
  def get(
24
24
  self,