zaber-motion 7.7.0__py3-none-macosx_10_4_universal2.whl → 7.8.1__py3-none-macosx_10_4_universal2.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.
zaber_motion/__init__.py CHANGED
@@ -61,6 +61,7 @@ from .exceptions.pvt_execution_exception import PvtExecutionException as PvtExec
61
61
  from .exceptions.pvt_mode_exception import PvtModeException as PvtModeException
62
62
  from .exceptions.pvt_movement_failed_exception import PvtMovementFailedException as PvtMovementFailedException
63
63
  from .exceptions.pvt_movement_interrupted_exception import PvtMovementInterruptedException as PvtMovementInterruptedException
64
+ from .exceptions.pvt_sequence_generation_failed_exception import PvtSequenceGenerationFailedException as PvtSequenceGenerationFailedException
64
65
  from .exceptions.pvt_setup_failed_exception import PvtSetupFailedException as PvtSetupFailedException
65
66
  from .exceptions.remote_mode_exception import RemoteModeException as RemoteModeException
66
67
  from .exceptions.request_timeout_exception import RequestTimeoutException as RequestTimeoutException
@@ -45,6 +45,7 @@ from ..dto.ascii.io_port_type import IoPortType as IoPortType
45
45
  from ..dto.ascii.lockstep_axes import LockstepAxes as LockstepAxes
46
46
  from ..dto.ascii.measurement_sequence import MeasurementSequence as MeasurementSequence
47
47
  from ..dto.ascii.message_type import MessageType as MessageType
48
+ from ..dto.ascii.optional_measurement_sequence import OptionalMeasurementSequence as OptionalMeasurementSequence
48
49
  from ..dto.ascii.oscilloscope_capture_properties import OscilloscopeCaptureProperties as OscilloscopeCaptureProperties
49
50
  from ..dto.ascii.oscilloscope_data_source import OscilloscopeDataSource as OscilloscopeDataSource
50
51
  from ..dto.ascii.paramset_info import ParamsetInfo as ParamsetInfo
@@ -12,6 +12,8 @@ from ..dto.ascii.pvt_axis_definition import PvtAxisDefinition
12
12
  from ..dto.ascii.pvt_sequence_data import PvtSequenceData
13
13
  from ..dto.ascii.pvt_csv_data import PvtCsvData
14
14
  from ..dto.ascii.measurement_sequence import MeasurementSequence
15
+ from ..dto.ascii.optional_measurement_sequence import OptionalMeasurementSequence
16
+
15
17
  from .pvt_io import PvtIo
16
18
  from ..dto.ascii.digital_output_action import DigitalOutputAction
17
19
 
@@ -506,6 +508,168 @@ class PvtSequence:
506
508
  )
507
509
  await call_async("device/stream_points", request)
508
510
 
511
+ @staticmethod
512
+ def generate_velocities(
513
+ positions: List[MeasurementSequence],
514
+ times: MeasurementSequence,
515
+ velocities: Optional[List[OptionalMeasurementSequence]] = None,
516
+ times_relative: bool = True
517
+ ) -> PvtSequenceData:
518
+ """
519
+ Generates velocities for a sequence of positions and times, and (optionally) a partially defined sequence
520
+ of velocities. Note that if some velocities are defined, the solver will NOT modify them in any way.
521
+ If all velocities are defined, the solver will simply return the same velocities.
522
+ This function calculates velocities by enforcing that acceleration be continuous at each segment transition.
523
+
524
+ Also note that if generating a path for multiple axes, the user must provide a position measurement sequence
525
+ per axis, And the values arrays for each sequence must be equal in length to each other and also to the
526
+ times sequence.
527
+
528
+ Args:
529
+ positions: Positions for the axes to move through, relative to their home positions.
530
+ Each MeasurementSequence represents a sequence of positions along a particular dimension.
531
+ For example, a 2D path sequence would contain two MeasurementSequence objects,
532
+ one representing positions along X and one for those along Y.
533
+ times: The relative or absolute time of each position in the PVT sequence.
534
+ velocities: Optional velocities corresponding to each point in the position sequences.
535
+ times_relative: If true, the times sequence values are interpreted as relative. Otherwise,
536
+ they are interpreted as absolute. Note that the values of the returned time
537
+ sequence are ALWAYS relative. This is because the PVT sequence API expects
538
+ points to have relative times.
539
+
540
+ Returns:
541
+ Object containing the generated PVT sequence. Note that returned time sequence is always relative.
542
+ """
543
+ request = dto.PvtGenerateVelocitiesRequest(
544
+ positions=positions,
545
+ times=times,
546
+ velocities=velocities,
547
+ times_relative=times_relative,
548
+ )
549
+ response = call(
550
+ "device/pvt_generate_velocities",
551
+ request,
552
+ PvtSequenceData.from_binary)
553
+ return response
554
+
555
+ @staticmethod
556
+ async def generate_velocities_async(
557
+ positions: List[MeasurementSequence],
558
+ times: MeasurementSequence,
559
+ velocities: Optional[List[OptionalMeasurementSequence]] = None,
560
+ times_relative: bool = True
561
+ ) -> PvtSequenceData:
562
+ """
563
+ Generates velocities for a sequence of positions and times, and (optionally) a partially defined sequence
564
+ of velocities. Note that if some velocities are defined, the solver will NOT modify them in any way.
565
+ If all velocities are defined, the solver will simply return the same velocities.
566
+ This function calculates velocities by enforcing that acceleration be continuous at each segment transition.
567
+
568
+ Also note that if generating a path for multiple axes, the user must provide a position measurement sequence
569
+ per axis, And the values arrays for each sequence must be equal in length to each other and also to the
570
+ times sequence.
571
+
572
+ Args:
573
+ positions: Positions for the axes to move through, relative to their home positions.
574
+ Each MeasurementSequence represents a sequence of positions along a particular dimension.
575
+ For example, a 2D path sequence would contain two MeasurementSequence objects,
576
+ one representing positions along X and one for those along Y.
577
+ times: The relative or absolute time of each position in the PVT sequence.
578
+ velocities: Optional velocities corresponding to each point in the position sequences.
579
+ times_relative: If true, the times sequence values are interpreted as relative. Otherwise,
580
+ they are interpreted as absolute. Note that the values of the returned time
581
+ sequence are ALWAYS relative. This is because the PVT sequence API expects
582
+ points to have relative times.
583
+
584
+ Returns:
585
+ Object containing the generated PVT sequence. Note that returned time sequence is always relative.
586
+ """
587
+ request = dto.PvtGenerateVelocitiesRequest(
588
+ positions=positions,
589
+ times=times,
590
+ velocities=velocities,
591
+ times_relative=times_relative,
592
+ )
593
+ response = await call_async(
594
+ "device/pvt_generate_velocities",
595
+ request,
596
+ PvtSequenceData.from_binary)
597
+ return response
598
+
599
+ @staticmethod
600
+ def generate_positions(
601
+ velocities: List[MeasurementSequence],
602
+ times: MeasurementSequence,
603
+ times_relative: bool = True
604
+ ) -> PvtSequenceData:
605
+ """
606
+ Generates positions for a sequence of velocities and times. This function calculates
607
+ positions by enforcing that acceleration be continuous at each segment transition.
608
+
609
+ Note that if generating a path for multiple axes, the user must provide a
610
+ velocity measurement sequence per axis, and the values arrays for each sequence
611
+ must be equal in length to each other and also to the times sequence.
612
+
613
+ Args:
614
+ velocities: The sequence of velocities for each axis.
615
+ Each MeasurementSequence represents a sequence of velocities along particular dimension.
616
+ times: The relative or absolute time of each position in the PVT sequence.
617
+ times_relative: If true, the times sequence values are interpreted as relative. Otherwise,
618
+ they are interpreted as absolute. Note that the values of the returned time
619
+ sequence are ALWAYS relative. This is because the PVT sequence API expects
620
+ points to have relative times.
621
+
622
+ Returns:
623
+ Object containing the generated PVT sequence. Note that returned time sequence is always relative.
624
+ """
625
+ request = dto.PvtGeneratePositionsRequest(
626
+ velocities=velocities,
627
+ times=times,
628
+ times_relative=times_relative,
629
+ )
630
+ response = call(
631
+ "device/pvt_generate_positions",
632
+ request,
633
+ PvtSequenceData.from_binary)
634
+ return response
635
+
636
+ @staticmethod
637
+ async def generate_positions_async(
638
+ velocities: List[MeasurementSequence],
639
+ times: MeasurementSequence,
640
+ times_relative: bool = True
641
+ ) -> PvtSequenceData:
642
+ """
643
+ Generates positions for a sequence of velocities and times. This function calculates
644
+ positions by enforcing that acceleration be continuous at each segment transition.
645
+
646
+ Note that if generating a path for multiple axes, the user must provide a
647
+ velocity measurement sequence per axis, and the values arrays for each sequence
648
+ must be equal in length to each other and also to the times sequence.
649
+
650
+ Args:
651
+ velocities: The sequence of velocities for each axis.
652
+ Each MeasurementSequence represents a sequence of velocities along particular dimension.
653
+ times: The relative or absolute time of each position in the PVT sequence.
654
+ times_relative: If true, the times sequence values are interpreted as relative. Otherwise,
655
+ they are interpreted as absolute. Note that the values of the returned time
656
+ sequence are ALWAYS relative. This is because the PVT sequence API expects
657
+ points to have relative times.
658
+
659
+ Returns:
660
+ Object containing the generated PVT sequence. Note that returned time sequence is always relative.
661
+ """
662
+ request = dto.PvtGeneratePositionsRequest(
663
+ velocities=velocities,
664
+ times=times,
665
+ times_relative=times_relative,
666
+ )
667
+ response = await call_async(
668
+ "device/pvt_generate_positions",
669
+ request,
670
+ PvtSequenceData.from_binary)
671
+ return response
672
+
509
673
  def wait_until_idle(
510
674
  self,
511
675
  throw_error_on_fault: bool = True
@@ -907,7 +1071,7 @@ class PvtSequence:
907
1071
  def save_sequence_data(
908
1072
  sequence_data: PvtSequenceData,
909
1073
  path: str,
910
- dimension_names: Optional[List[str]]
1074
+ dimension_names: Optional[List[str]] = None
911
1075
  ) -> None:
912
1076
  """
913
1077
  Saves PvtSequenceData object as csv file.
@@ -935,7 +1099,7 @@ class PvtSequence:
935
1099
  async def save_sequence_data_async(
936
1100
  sequence_data: PvtSequenceData,
937
1101
  path: str,
938
- dimension_names: Optional[List[str]]
1102
+ dimension_names: Optional[List[str]] = None
939
1103
  ) -> None:
940
1104
  """
941
1105
  Saves PvtSequenceData object as csv file.
@@ -48,6 +48,7 @@ from .exceptions.pvt_execution_exception import PvtExecutionException
48
48
  from .exceptions.pvt_mode_exception import PvtModeException
49
49
  from .exceptions.pvt_movement_failed_exception import PvtMovementFailedException
50
50
  from .exceptions.pvt_movement_interrupted_exception import PvtMovementInterruptedException
51
+ from .exceptions.pvt_sequence_generation_failed_exception import PvtSequenceGenerationFailedException
51
52
  from .exceptions.pvt_setup_failed_exception import PvtSetupFailedException
52
53
  from .exceptions.remote_mode_exception import RemoteModeException
53
54
  from .exceptions.request_timeout_exception import RequestTimeoutException
@@ -111,6 +112,7 @@ errorMap = {
111
112
  "PVT_MODE": PvtModeException,
112
113
  "PVT_MOVEMENT_FAILED": PvtMovementFailedException,
113
114
  "PVT_MOVEMENT_INTERRUPTED": PvtMovementInterruptedException,
115
+ "PVT_SEQUENCE_GENERATION_FAILED": PvtSequenceGenerationFailedException,
114
116
  "PVT_SETUP_FAILED": PvtSetupFailedException,
115
117
  "REMOTE_MODE": RemoteModeException,
116
118
  "REQUEST_TIMEOUT": RequestTimeoutException,
@@ -18,6 +18,7 @@ from .io_port_type import IoPortType as IoPortType
18
18
  from .lockstep_axes import LockstepAxes as LockstepAxes
19
19
  from .measurement_sequence import MeasurementSequence as MeasurementSequence
20
20
  from .message_type import MessageType as MessageType
21
+ from .optional_measurement_sequence import OptionalMeasurementSequence as OptionalMeasurementSequence
21
22
  from .oscilloscope_capture_properties import OscilloscopeCaptureProperties as OscilloscopeCaptureProperties
22
23
  from .oscilloscope_data_source import OscilloscopeDataSource as OscilloscopeDataSource
23
24
  from .paramset_info import ParamsetInfo as ParamsetInfo
@@ -19,7 +19,7 @@ class CanSetStateAxisResponse:
19
19
 
20
20
  error: Optional[str] = None
21
21
  """
22
- The error blocking applying this state to the given axis.
22
+ The error blocking applying this state to the given axis, or null if there is no error.
23
23
  """
24
24
 
25
25
  @staticmethod
@@ -15,12 +15,13 @@ class CanSetStateDeviceResponse:
15
15
 
16
16
  axis_errors: List[CanSetStateAxisResponse]
17
17
  """
18
- A list of errors that block setting state of device's axes.
18
+ A list of axis responses, potentially with messages for errors
19
+ which would block setting the state of the device's axes.
19
20
  """
20
21
 
21
22
  error: Optional[str] = None
22
23
  """
23
- The error blocking applying this state to the given device.
24
+ The error blocking applying this state to the given device, or null if there is no error.
24
25
  """
25
26
 
26
27
  @staticmethod
@@ -0,0 +1,71 @@
1
+ # This file is generated. Do not modify by hand.
2
+ # pylint: disable=line-too-long, unused-argument, f-string-without-interpolation, too-many-branches, too-many-statements, unnecessary-pass
3
+ from dataclasses import dataclass
4
+ from typing import Any, Dict, List, Optional
5
+ import decimal
6
+ from collections.abc import Iterable
7
+ import zaber_bson
8
+ from ...units import Units, UnitsAndLiterals, units_from_literals
9
+
10
+
11
+ @dataclass
12
+ class OptionalMeasurementSequence:
13
+ """
14
+ Represents a sequence of optional numerical values with optional units specified.
15
+ """
16
+
17
+ values: List[Optional[float]]
18
+ """
19
+ Sequence of values.
20
+ """
21
+
22
+ unit: Optional[UnitsAndLiterals] = None
23
+ """
24
+ Optional units of the sequence.
25
+ """
26
+
27
+ @staticmethod
28
+ def zero_values() -> 'OptionalMeasurementSequence':
29
+ return OptionalMeasurementSequence(
30
+ values=[],
31
+ unit=None,
32
+ )
33
+
34
+ @staticmethod
35
+ def from_binary(data_bytes: bytes) -> 'OptionalMeasurementSequence':
36
+ """" Deserialize a binary representation of this class. """
37
+ data = zaber_bson.loads(data_bytes) # type: Dict[str, Any]
38
+ return OptionalMeasurementSequence.from_dict(data)
39
+
40
+ def to_binary(self) -> bytes:
41
+ """" Serialize this class to a binary representation. """
42
+ self.validate()
43
+ return zaber_bson.dumps(self.to_dict()) # type: ignore
44
+
45
+ def to_dict(self) -> Dict[str, Any]:
46
+ return {
47
+ 'values': [float(item) if item is not None else None for item in self.values] if self.values is not None else [],
48
+ 'unit': units_from_literals(self.unit).value if self.unit is not None else None,
49
+ }
50
+
51
+ @staticmethod
52
+ def from_dict(data: Dict[str, Any]) -> 'OptionalMeasurementSequence':
53
+ return OptionalMeasurementSequence(
54
+ values=data.get('values'), # type: ignore
55
+ unit=Units(data.get('unit')) if data.get('unit') is not None else None, # type: ignore
56
+ )
57
+
58
+ def validate(self) -> None:
59
+ """" Validates the properties of the instance. """
60
+ if self.values is not None:
61
+ if not isinstance(self.values, Iterable):
62
+ raise ValueError('Property "Values" of "OptionalMeasurementSequence" is not iterable.')
63
+
64
+ for i, values_item in enumerate(self.values):
65
+ if values_item is not None:
66
+ if not isinstance(values_item, (int, float, decimal.Decimal)):
67
+ raise ValueError(f'Item {i} in property "Values" of "OptionalMeasurementSequence" is not a number.')
68
+
69
+ if self.unit is not None:
70
+ if not isinstance(self.unit, (Units, str)):
71
+ raise ValueError(f'Property "Unit" of "OptionalMeasurementSequence" is not Units.')
@@ -20,7 +20,8 @@ class SetStateDeviceResponse:
20
20
 
21
21
  axis_responses: List[SetStateAxisResponse]
22
22
  """
23
- A list of warnings encountered when applying this state to the device's axes.
23
+ A list of axis responses, potentially with warnings encountered
24
+ when applying this state to the device's axes.
24
25
  """
25
26
 
26
27
  @staticmethod
@@ -141,6 +141,8 @@ from .oscilloscope_request import OscilloscopeRequest as OscilloscopeRequest
141
141
  from .oscilloscope_start_request import OscilloscopeStartRequest as OscilloscopeStartRequest
142
142
  from .prepare_command_request import PrepareCommandRequest as PrepareCommandRequest
143
143
  from .process_on import ProcessOn as ProcessOn
144
+ from .pvt_generate_positions_request import PvtGeneratePositionsRequest as PvtGeneratePositionsRequest
145
+ from .pvt_generate_velocities_request import PvtGenerateVelocitiesRequest as PvtGenerateVelocitiesRequest
144
146
  from .pvt_load_csv_request import PvtLoadCsvRequest as PvtLoadCsvRequest
145
147
  from .pvt_point_request import PvtPointRequest as PvtPointRequest
146
148
  from .pvt_points_request import PvtPointsRequest as PvtPointsRequest
@@ -235,6 +237,7 @@ from .trigger_on_fire_set_request import TriggerOnFireSetRequest as TriggerOnFir
235
237
  from .trigger_on_fire_set_to_setting_request import TriggerOnFireSetToSettingRequest as TriggerOnFireSetToSettingRequest
236
238
  from .trigger_set_label_request import TriggerSetLabelRequest as TriggerSetLabelRequest
237
239
  from .trigger_states import TriggerStates as TriggerStates
240
+ from .unit_convert_unit_request import UnitConvertUnitRequest as UnitConvertUnitRequest
238
241
  from .unit_get_enum_request import UnitGetEnumRequest as UnitGetEnumRequest
239
242
  from .unit_get_enum_response import UnitGetEnumResponse as UnitGetEnumResponse
240
243
  from .unit_get_symbol_request import UnitGetSymbolRequest as UnitGetSymbolRequest
@@ -49,19 +49,20 @@ class Errors(Enum):
49
49
  PVT_MODE = 42
50
50
  PVT_MOVEMENT_FAILED = 43
51
51
  PVT_MOVEMENT_INTERRUPTED = 44
52
- PVT_SETUP_FAILED = 45
53
- REMOTE_MODE = 46
54
- REQUEST_TIMEOUT = 47
55
- SERIAL_PORT_BUSY = 48
56
- SET_DEVICE_STATE_FAILED = 49
57
- SET_PERIPHERAL_STATE_FAILED = 50
58
- SETTING_NOT_FOUND = 51
59
- STREAM_DISCONTINUITY = 52
60
- STREAM_EXECUTION = 53
61
- STREAM_MODE = 54
62
- STREAM_MOVEMENT_FAILED = 55
63
- STREAM_MOVEMENT_INTERRUPTED = 56
64
- STREAM_SETUP_FAILED = 57
65
- TIMEOUT = 58
66
- TRANSPORT_ALREADY_USED = 59
67
- UNKNOWN_REQUEST = 60
52
+ PVT_SEQUENCE_GENERATION_FAILED = 45
53
+ PVT_SETUP_FAILED = 46
54
+ REMOTE_MODE = 47
55
+ REQUEST_TIMEOUT = 48
56
+ SERIAL_PORT_BUSY = 49
57
+ SET_DEVICE_STATE_FAILED = 50
58
+ SET_PERIPHERAL_STATE_FAILED = 51
59
+ SETTING_NOT_FOUND = 52
60
+ STREAM_DISCONTINUITY = 53
61
+ STREAM_EXECUTION = 54
62
+ STREAM_MODE = 55
63
+ STREAM_MOVEMENT_FAILED = 56
64
+ STREAM_MOVEMENT_INTERRUPTED = 57
65
+ STREAM_SETUP_FAILED = 58
66
+ TIMEOUT = 59
67
+ TRANSPORT_ALREADY_USED = 60
68
+ UNKNOWN_REQUEST = 61
@@ -0,0 +1,74 @@
1
+ # This file is generated. Do not modify by hand.
2
+ # pylint: disable=line-too-long, unused-argument, f-string-without-interpolation, too-many-branches, too-many-statements, unnecessary-pass
3
+ from dataclasses import dataclass, field
4
+ from typing import Any, Dict, List
5
+ from collections.abc import Iterable
6
+ import zaber_bson
7
+ from ..ascii.measurement_sequence import MeasurementSequence
8
+
9
+
10
+ @dataclass
11
+ class PvtGeneratePositionsRequest:
12
+
13
+ velocities: List[MeasurementSequence] = field(default_factory=list)
14
+
15
+ times: MeasurementSequence = field(default_factory=MeasurementSequence.zero_values)
16
+
17
+ times_relative: bool = False
18
+
19
+ @staticmethod
20
+ def zero_values() -> 'PvtGeneratePositionsRequest':
21
+ return PvtGeneratePositionsRequest(
22
+ velocities=[],
23
+ times=MeasurementSequence.zero_values(),
24
+ times_relative=False,
25
+ )
26
+
27
+ @staticmethod
28
+ def from_binary(data_bytes: bytes) -> 'PvtGeneratePositionsRequest':
29
+ """" Deserialize a binary representation of this class. """
30
+ data = zaber_bson.loads(data_bytes) # type: Dict[str, Any]
31
+ return PvtGeneratePositionsRequest.from_dict(data)
32
+
33
+ def to_binary(self) -> bytes:
34
+ """" Serialize this class to a binary representation. """
35
+ self.validate()
36
+ return zaber_bson.dumps(self.to_dict()) # type: ignore
37
+
38
+ def to_dict(self) -> Dict[str, Any]:
39
+ return {
40
+ 'velocities': [item.to_dict() for item in self.velocities] if self.velocities is not None else [],
41
+ 'times': self.times.to_dict(),
42
+ 'timesRelative': bool(self.times_relative),
43
+ }
44
+
45
+ @staticmethod
46
+ def from_dict(data: Dict[str, Any]) -> 'PvtGeneratePositionsRequest':
47
+ return PvtGeneratePositionsRequest(
48
+ velocities=[MeasurementSequence.from_dict(item) for item in data.get('velocities')], # type: ignore
49
+ times=MeasurementSequence.from_dict(data.get('times')), # type: ignore
50
+ times_relative=data.get('timesRelative'), # type: ignore
51
+ )
52
+
53
+ def validate(self) -> None:
54
+ """" Validates the properties of the instance. """
55
+ if self.velocities is not None:
56
+ if not isinstance(self.velocities, Iterable):
57
+ raise ValueError('Property "Velocities" of "PvtGeneratePositionsRequest" is not iterable.')
58
+
59
+ for i, velocities_item in enumerate(self.velocities):
60
+ if velocities_item is None:
61
+ raise ValueError(f'Item {i} in property "Velocities" of "PvtGeneratePositionsRequest" is None.')
62
+
63
+ if not isinstance(velocities_item, MeasurementSequence):
64
+ raise ValueError(f'Item {i} in property "Velocities" of "PvtGeneratePositionsRequest" is not an instance of "MeasurementSequence".')
65
+
66
+ velocities_item.validate()
67
+
68
+ if self.times is None:
69
+ raise ValueError(f'Property "Times" of "PvtGeneratePositionsRequest" is None.')
70
+
71
+ if not isinstance(self.times, MeasurementSequence):
72
+ raise ValueError(f'Property "Times" of "PvtGeneratePositionsRequest" is not an instance of "MeasurementSequence".')
73
+
74
+ self.times.validate()
@@ -0,0 +1,93 @@
1
+ # This file is generated. Do not modify by hand.
2
+ # pylint: disable=line-too-long, unused-argument, f-string-without-interpolation, too-many-branches, too-many-statements, unnecessary-pass
3
+ from dataclasses import dataclass, field
4
+ from typing import Any, Dict, List, Optional
5
+ from collections.abc import Iterable
6
+ import zaber_bson
7
+ from ..ascii.measurement_sequence import MeasurementSequence
8
+ from ..ascii.optional_measurement_sequence import OptionalMeasurementSequence
9
+
10
+
11
+ @dataclass
12
+ class PvtGenerateVelocitiesRequest:
13
+
14
+ positions: List[MeasurementSequence] = field(default_factory=list)
15
+
16
+ times: MeasurementSequence = field(default_factory=MeasurementSequence.zero_values)
17
+
18
+ times_relative: bool = False
19
+
20
+ velocities: Optional[List[OptionalMeasurementSequence]] = None
21
+
22
+ @staticmethod
23
+ def zero_values() -> 'PvtGenerateVelocitiesRequest':
24
+ return PvtGenerateVelocitiesRequest(
25
+ positions=[],
26
+ velocities=None,
27
+ times=MeasurementSequence.zero_values(),
28
+ times_relative=False,
29
+ )
30
+
31
+ @staticmethod
32
+ def from_binary(data_bytes: bytes) -> 'PvtGenerateVelocitiesRequest':
33
+ """" Deserialize a binary representation of this class. """
34
+ data = zaber_bson.loads(data_bytes) # type: Dict[str, Any]
35
+ return PvtGenerateVelocitiesRequest.from_dict(data)
36
+
37
+ def to_binary(self) -> bytes:
38
+ """" Serialize this class to a binary representation. """
39
+ self.validate()
40
+ return zaber_bson.dumps(self.to_dict()) # type: ignore
41
+
42
+ def to_dict(self) -> Dict[str, Any]:
43
+ return {
44
+ 'positions': [item.to_dict() for item in self.positions] if self.positions is not None else [],
45
+ 'velocities': [item.to_dict() for item in self.velocities] if self.velocities is not None else [],
46
+ 'times': self.times.to_dict(),
47
+ 'timesRelative': bool(self.times_relative),
48
+ }
49
+
50
+ @staticmethod
51
+ def from_dict(data: Dict[str, Any]) -> 'PvtGenerateVelocitiesRequest':
52
+ return PvtGenerateVelocitiesRequest(
53
+ positions=[MeasurementSequence.from_dict(item) for item in data.get('positions')], # type: ignore
54
+ velocities=[OptionalMeasurementSequence.from_dict(item) for item in data.get('velocities')] if data.get('velocities') is not None else None, # type: ignore
55
+ times=MeasurementSequence.from_dict(data.get('times')), # type: ignore
56
+ times_relative=data.get('timesRelative'), # type: ignore
57
+ )
58
+
59
+ def validate(self) -> None:
60
+ """" Validates the properties of the instance. """
61
+ if self.positions is not None:
62
+ if not isinstance(self.positions, Iterable):
63
+ raise ValueError('Property "Positions" of "PvtGenerateVelocitiesRequest" is not iterable.')
64
+
65
+ for i, positions_item in enumerate(self.positions):
66
+ if positions_item is None:
67
+ raise ValueError(f'Item {i} in property "Positions" of "PvtGenerateVelocitiesRequest" is None.')
68
+
69
+ if not isinstance(positions_item, MeasurementSequence):
70
+ raise ValueError(f'Item {i} in property "Positions" of "PvtGenerateVelocitiesRequest" is not an instance of "MeasurementSequence".')
71
+
72
+ positions_item.validate()
73
+
74
+ if self.velocities is not None:
75
+ if not isinstance(self.velocities, Iterable):
76
+ raise ValueError('Property "Velocities" of "PvtGenerateVelocitiesRequest" is not iterable.')
77
+
78
+ for i, velocities_item in enumerate(self.velocities):
79
+ if velocities_item is None:
80
+ raise ValueError(f'Item {i} in property "Velocities" of "PvtGenerateVelocitiesRequest" is None.')
81
+
82
+ if not isinstance(velocities_item, OptionalMeasurementSequence):
83
+ raise ValueError(f'Item {i} in property "Velocities" of "PvtGenerateVelocitiesRequest" is not an instance of "OptionalMeasurementSequence".')
84
+
85
+ velocities_item.validate()
86
+
87
+ if self.times is None:
88
+ raise ValueError(f'Property "Times" of "PvtGenerateVelocitiesRequest" is None.')
89
+
90
+ if not isinstance(self.times, MeasurementSequence):
91
+ raise ValueError(f'Property "Times" of "PvtGenerateVelocitiesRequest" is not an instance of "MeasurementSequence".')
92
+
93
+ self.times.validate()
@@ -0,0 +1,71 @@
1
+ # This file is generated. Do not modify by hand.
2
+ # pylint: disable=line-too-long, unused-argument, f-string-without-interpolation, too-many-branches, too-many-statements, unnecessary-pass
3
+ from dataclasses import dataclass
4
+ from typing import Any, Dict
5
+ import decimal
6
+ import zaber_bson
7
+ from ...units import Units, UnitsAndLiterals, units_from_literals
8
+
9
+
10
+ @dataclass
11
+ class UnitConvertUnitRequest:
12
+
13
+ value: float = 0
14
+
15
+ from_unit: UnitsAndLiterals = Units.NATIVE
16
+
17
+ to_unit: UnitsAndLiterals = Units.NATIVE
18
+
19
+ @staticmethod
20
+ def zero_values() -> 'UnitConvertUnitRequest':
21
+ return UnitConvertUnitRequest(
22
+ value=0,
23
+ from_unit=Units.NATIVE,
24
+ to_unit=Units.NATIVE,
25
+ )
26
+
27
+ @staticmethod
28
+ def from_binary(data_bytes: bytes) -> 'UnitConvertUnitRequest':
29
+ """" Deserialize a binary representation of this class. """
30
+ data = zaber_bson.loads(data_bytes) # type: Dict[str, Any]
31
+ return UnitConvertUnitRequest.from_dict(data)
32
+
33
+ def to_binary(self) -> bytes:
34
+ """" Serialize this class to a binary representation. """
35
+ self.validate()
36
+ return zaber_bson.dumps(self.to_dict()) # type: ignore
37
+
38
+ def to_dict(self) -> Dict[str, Any]:
39
+ return {
40
+ 'value': float(self.value),
41
+ 'fromUnit': units_from_literals(self.from_unit).value,
42
+ 'toUnit': units_from_literals(self.to_unit).value,
43
+ }
44
+
45
+ @staticmethod
46
+ def from_dict(data: Dict[str, Any]) -> 'UnitConvertUnitRequest':
47
+ return UnitConvertUnitRequest(
48
+ value=data.get('value'), # type: ignore
49
+ from_unit=Units(data.get('fromUnit')), # type: ignore
50
+ to_unit=Units(data.get('toUnit')), # type: ignore
51
+ )
52
+
53
+ def validate(self) -> None:
54
+ """" Validates the properties of the instance. """
55
+ if self.value is None:
56
+ raise ValueError(f'Property "Value" of "UnitConvertUnitRequest" is None.')
57
+
58
+ if not isinstance(self.value, (int, float, decimal.Decimal)):
59
+ raise ValueError(f'Property "Value" of "UnitConvertUnitRequest" is not a number.')
60
+
61
+ if self.from_unit is None:
62
+ raise ValueError(f'Property "FromUnit" of "UnitConvertUnitRequest" is None.')
63
+
64
+ if not isinstance(self.from_unit, (Units, str)):
65
+ raise ValueError(f'Property "FromUnit" of "UnitConvertUnitRequest" is not Units.')
66
+
67
+ if self.to_unit is None:
68
+ raise ValueError(f'Property "ToUnit" of "UnitConvertUnitRequest" is None.')
69
+
70
+ if not isinstance(self.to_unit, (Units, str)):
71
+ raise ValueError(f'Property "ToUnit" of "UnitConvertUnitRequest" is not Units.')
@@ -46,6 +46,7 @@ from .pvt_execution_exception import PvtExecutionException as PvtExecutionExcept
46
46
  from .pvt_mode_exception import PvtModeException as PvtModeException
47
47
  from .pvt_movement_failed_exception import PvtMovementFailedException as PvtMovementFailedException
48
48
  from .pvt_movement_interrupted_exception import PvtMovementInterruptedException as PvtMovementInterruptedException
49
+ from .pvt_sequence_generation_failed_exception import PvtSequenceGenerationFailedException as PvtSequenceGenerationFailedException
49
50
  from .pvt_setup_failed_exception import PvtSetupFailedException as PvtSetupFailedException
50
51
  from .remote_mode_exception import RemoteModeException as RemoteModeException
51
52
  from .request_timeout_exception import RequestTimeoutException as RequestTimeoutException
@@ -0,0 +1,10 @@
1
+ # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
+ # ============== DO NOT EDIT DIRECTLY ============== #
3
+
4
+ from .motion_lib_exception import MotionLibException
5
+
6
+
7
+ class PvtSequenceGenerationFailedException(MotionLibException):
8
+ """
9
+ Thrown when a PVT sequence generator function fails to find a sequence.
10
+ """
zaber_motion/library.py CHANGED
@@ -2,7 +2,7 @@
2
2
  # ============== DO NOT EDIT DIRECTLY ============== #
3
3
 
4
4
  from typing import Optional
5
- from .call import call_sync
5
+ from .call import call, call_async, call_sync
6
6
  from .dto import requests as dto
7
7
  from .dto.log_output_mode import LogOutputMode
8
8
  from .dto.device_db_source_type import DeviceDbSourceType
@@ -79,6 +79,42 @@ class Library:
79
79
  )
80
80
  call_sync("device_db/toggle_store", request)
81
81
 
82
+ @staticmethod
83
+ def is_device_db_store_enabled() -> bool:
84
+ """
85
+ Checks if the Device DB store is currently enabled.
86
+
87
+ Returns:
88
+ True if the Device DB store is enabled.
89
+ """
90
+ request = dto.EmptyRequest(
91
+ )
92
+ response = call_sync(
93
+ "device_db/check_store",
94
+ request,
95
+ dto.BoolResponse.from_binary)
96
+ return response.value
97
+
98
+ @staticmethod
99
+ def clear_device_db_store() -> None:
100
+ """
101
+ Clears the Device DB store on the local filesystem.
102
+ Note: If the device DB was enabled with a custom store location, store files will be removed in that location.
103
+ """
104
+ request = dto.EmptyRequest(
105
+ )
106
+ call("device_db/clear_store", request)
107
+
108
+ @staticmethod
109
+ async def clear_device_db_store_async() -> None:
110
+ """
111
+ Clears the Device DB store on the local filesystem.
112
+ Note: If the device DB was enabled with a custom store location, store files will be removed in that location.
113
+ """
114
+ request = dto.EmptyRequest(
115
+ )
116
+ await call_async("device_db/clear_store", request)
117
+
82
118
  @staticmethod
83
119
  def set_internal_mode(
84
120
  mode: bool
@@ -118,7 +154,7 @@ class Library:
118
154
  """
119
155
  request = dto.CheckVersionRequest(
120
156
  host="py",
121
- version="7.7.0",
157
+ version="7.8.1",
122
158
  )
123
159
  call_sync("library/check_version", request)
124
160
 
@@ -55,3 +55,32 @@ class UnitTable:
55
55
  request,
56
56
  dto.UnitGetEnumResponse.from_binary)
57
57
  return response.unit
58
+
59
+ @staticmethod
60
+ def convert_units(
61
+ value: float,
62
+ from_unit: UnitsAndLiterals,
63
+ to_unit: UnitsAndLiterals
64
+ ) -> float:
65
+ """
66
+ Converts a value from one unit to a different unit of the same dimension.
67
+ Note that this function does not support native unit conversions.
68
+
69
+ Args:
70
+ value: The value to be converted.
71
+ from_unit: The unit which the value is being converted from.
72
+ to_unit: The unit which the value is being converted to.
73
+
74
+ Returns:
75
+ The converted value. Throws ConversionFailedException if unit is incompatible.
76
+ """
77
+ request = dto.UnitConvertUnitRequest(
78
+ value=value,
79
+ from_unit=from_unit,
80
+ to_unit=to_unit,
81
+ )
82
+ response = call_sync(
83
+ "units/convert_unit",
84
+ request,
85
+ dto.DoubleResponse.from_binary)
86
+ return response.value
zaber_motion/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "7.7.0"
1
+ __version__ = "7.8.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zaber_motion
3
- Version: 7.7.0
3
+ Version: 7.8.1
4
4
  Summary: An official library for communicating with Zaber devices.
5
5
  Author-email: "Zaber Technologies Inc." <contact@zaber.com>
6
6
  License: The MIT License (MIT)
@@ -2,21 +2,21 @@ zaber_bson/LICENSE,sha256=f5kZmQkwTAqUrB11itTRn3zugoXI8dDHqBx_3_ppUOs,1523
2
2
  zaber_bson/__init__.py,sha256=YzbosAB_E58P0kJ1Q29wR5GYedCkSc2a5VnOmdUBNtw,1583
3
3
  zaber_bson/codec.py,sha256=sIKjd5T1AsfXYHVOotFQvxYMor6KPGNhjH71u-7iUNw,14191
4
4
  zaber_bson/types.py,sha256=TpQpCs50s8LHye9jJIqZIghW3TDf056pcm5P5dV5Bx0,1187
5
- zaber_motion/__init__.py,sha256=cn_wn-z2zIMaKauIY4H1WHmYwC18G7N7JQNdJhbSskE,10054
5
+ zaber_motion/__init__.py,sha256=y9QG7iNR3EE41fRpeNveeJ_bC5vUOcHdpk8ekC5W9yI,10196
6
6
  zaber_motion/async_utils.py,sha256=3i14u5lwECpctxvwQ7izt0Q_RRwB6UfFtuDOIiM6o28,1505
7
7
  zaber_motion/bindings.py,sha256=vS6PfLmBgDnQrPXsOyXRLqgN7SSCWswmtVxSYV6AgjQ,1505
8
8
  zaber_motion/call.py,sha256=lH72duqcNvzh3Mae5JYZ5kIsyMRftSxSCgmWk9TjYik,5206
9
- zaber_motion/convert_exception.py,sha256=hkgp2buIG7uVei9PMwcYAdOcNedhJAfaX5dj1JMJuMM,8309
9
+ zaber_motion/convert_exception.py,sha256=TZrdGkmaTR7QOAwoxIQ9sOkHtuVg1bVs-sxbEDn22V8,8487
10
10
  zaber_motion/dto_object.py,sha256=3gJU6AQCjiZcx2o7p2C9VTqw9apOM0i21ssmAM-VmEY,359
11
11
  zaber_motion/events.py,sha256=3Ebp8zEjlRSjKG-b3WVrncZ6juHlKJTNeL-oeYIGpuk,3398
12
- zaber_motion/library.py,sha256=bxiNkqIKl4qeOkUmf3PYBzdtWebvV2oOZcUzOeTGrSY,3755
12
+ zaber_motion/library.py,sha256=P639o-d20ixjjDf2wURCg5AzG3FlxilYeNdtNIshJWY,4934
13
13
  zaber_motion/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  zaber_motion/serialization.py,sha256=Fm53Bd_oAZ7yaTjtBss23Dps3ynWv8wUJT5JVQyqKVs,987
15
15
  zaber_motion/tools.py,sha256=O9IGJNGaaG7Sz2jGkexdJfgyJ5L4vsLXJKFUhZlKlCI,2213
16
- zaber_motion/unit_table.py,sha256=CG7or4TeGxdct_hnEA_mqqv7X7HSeDrZGzyMqWKfuL8,1540
16
+ zaber_motion/unit_table.py,sha256=FV-6VegAm499BJBJ4tdXgkP2Hl2h-fIlLJWkMrHlPAM,2497
17
17
  zaber_motion/units.py,sha256=I-rnnzHhICUI0UGpL0a59t4Jm_JpRmj_ZDokeRmXFPk,10538
18
- zaber_motion/version.py,sha256=47fvHIkSmhyHn0x0ry3g-q6AbbaUsW0cVGEQdzOPvBw,22
19
- zaber_motion/ascii/__init__.py,sha256=8P-EWfbHBouseSaQL-0x18OGkNdAZxynUJTC0a011uw,4735
18
+ zaber_motion/version.py,sha256=q9HCYvd_KKYPNhrFJZNCqDLkLzTKEm20j2_jzE7u-Lw,22
19
+ zaber_motion/ascii/__init__.py,sha256=hB91yrB-iTGuk270V97TQK09fMiMUwL3FEIKhLqMJfc,4848
20
20
  zaber_motion/ascii/all_axes.py,sha256=ob_LjrgU9jNCW3t9k0U7QSa-92ap9HspmHCsv7dkzgI,10783
21
21
  zaber_motion/ascii/axis.py,sha256=Ks5MGJRUeKIwyUZOQ-13-fWpjt3ZJu9oyoGNT2yEJSg,57618
22
22
  zaber_motion/ascii/axis_group.py,sha256=mcjxN3jhpKNaFB3rg60smi6Qr_75JPRXq2v6YDqjlfo,12927
@@ -31,7 +31,7 @@ zaber_motion/ascii/oscilloscope_data.py,sha256=YEOJH4yY_4R2Anm2-OOZXt_3jxFUMAD3R
31
31
  zaber_motion/ascii/pvt.py,sha256=_D_S6JenjZ_DC-agtmyp5rx__utRV63T0eKA7sPcguE,2865
32
32
  zaber_motion/ascii/pvt_buffer.py,sha256=wrxf3n2hNL82QdyCiBG3c3jDwQb9tnDpaxBW1aiY_-s,3165
33
33
  zaber_motion/ascii/pvt_io.py,sha256=FiwJG6FQTPPtLRgH3AQhjfHRwWmDwiRri77dgyz4zXs,22237
34
- zaber_motion/ascii/pvt_sequence.py,sha256=HQmgASNSdpFCF9N6FZnEtMSUIihJ7RAEjNttd1usYsg,42988
34
+ zaber_motion/ascii/pvt_sequence.py,sha256=B4gAYjKtBkp4DGj30RxXv6aNOgtFlBly-ZacvclqHug,51329
35
35
  zaber_motion/ascii/servo_tuner.py,sha256=uV3UxXIgz1xx-_lRaaxMVjF45Fp1AGpPgO1vKTYx8ro,23339
36
36
  zaber_motion/ascii/setting_constants.py,sha256=1IWvClLjkV96gqZyCdpmxhqTumh-ZqGDhZ3POOYq7ro,29495
37
37
  zaber_motion/ascii/storage.py,sha256=nB4adzPAZI4YL3lUgB3hrFHmP7Rof8dl_b_AsgOGEP0,26131
@@ -57,12 +57,12 @@ zaber_motion/dto/log_output_mode.py,sha256=cJuF_Xfmulvpek8UYExt7Re9uwFyZPMQgYCko
57
57
  zaber_motion/dto/measurement.py,sha256=TMLk6tdGQP0qRspzRW_ITEIJt0zy4vOyWXsgqBXgWbs,2219
58
58
  zaber_motion/dto/named_parameter.py,sha256=SYqr3ESG7k7pzIb7YbqI44VCD9QfL-HhMxum5JGmHTI,2006
59
59
  zaber_motion/dto/rotation_direction.py,sha256=9BiDpSUbRB1yXqiJiaCi05Bkg5rWVZYv78wSZ2JDmC8,214
60
- zaber_motion/dto/ascii/__init__.py,sha256=daexoP6vv8Vo6nMuYggVHqH-zgNmgRlnbGW2X44NKpk,2946
60
+ zaber_motion/dto/ascii/__init__.py,sha256=epPPuy1Uxd5dnrft1_OYh-K-mT9oQg1lLYoWj1SXySY,3048
61
61
  zaber_motion/dto/ascii/alert_event.py,sha256=ov3oTWjcru4UoYvPSiXuJaCvrOvS31DHSK96_JEaPJM,3834
62
62
  zaber_motion/dto/ascii/axis_identity.py,sha256=EZ-E8XCvfDRfcq8s27nHGSQHHvaxEMsL0rk46Mrt7pk,4268
63
63
  zaber_motion/dto/ascii/axis_type.py,sha256=bMG3ienP4BKf-b3hhZW2f_kYAyRP2_lYVbZdstqmUwA,237
64
- zaber_motion/dto/ascii/can_set_state_axis_response.py,sha256=2WMl6E-zfqrck2A-BZMPmAxfuMGlAZDG9gUt08tVHFg,2476
65
- zaber_motion/dto/ascii/can_set_state_device_response.py,sha256=px1mI6Ky2bigRU2iDmWbVKnIL2vWsMpU9SgjBmkQLnQ,2996
64
+ zaber_motion/dto/ascii/can_set_state_axis_response.py,sha256=-6zTOvCDXDYmeAlmZ4CCc5nfKGimtHWcb3AjSuQFhyc,2506
65
+ zaber_motion/dto/ascii/can_set_state_device_response.py,sha256=ll-5a3u9yHJzgsOW6ZPFu_pHgbXyRhGIi1Q4TCbp6po,3091
66
66
  zaber_motion/dto/ascii/conversion_factor.py,sha256=V_gP9RZI-wKurPUPLiSB-L_Zeb4gwZk7-aciqZMWjWY,2656
67
67
  zaber_motion/dto/ascii/device_identity.py,sha256=kyirom_PHXdYuvxMz_1N7sdmKaobYjClq9ivN8uTcnE,4717
68
68
  zaber_motion/dto/ascii/device_io_info.py,sha256=mLMlmUzjyb9BgzXeRs3zrhJbcxgS9g9i97_z6Pwq9z8,4337
@@ -76,6 +76,7 @@ zaber_motion/dto/ascii/io_port_type.py,sha256=7Hp8M5__xslDIFKTZ_zxz0COeYEPcH2Drb
76
76
  zaber_motion/dto/ascii/lockstep_axes.py,sha256=l7wxEnMVYopmcrlzzvZNFW-nzjVI6iPHsLmIiWYogIU,3591
77
77
  zaber_motion/dto/ascii/measurement_sequence.py,sha256=Zffask0fxnkdd84Q0yPG0TWAPdxD-ufquTGXBvCfUGA,2719
78
78
  zaber_motion/dto/ascii/message_type.py,sha256=64UZk6C4V83pGramwcBllmfejUojXb_M2uf3RIzihws,322
79
+ zaber_motion/dto/ascii/optional_measurement_sequence.py,sha256=L-9B4gGsov4CID2tCqro5lhN8FxdPfvsCfFe7bhNLuY,2754
79
80
  zaber_motion/dto/ascii/oscilloscope_capture_properties.py,sha256=nKAg228CeqzyZ-rwNx9X7sWsTHS_opOdJUNE6TsWtEo,4531
80
81
  zaber_motion/dto/ascii/oscilloscope_data_source.py,sha256=gCM4V8Z3-_rtg4oD6qnTtifCE-NYfVzxNlGvSAPXGgg,204
81
82
  zaber_motion/dto/ascii/paramset_info.py,sha256=P5rc7dmBfUHxo1cFke8E_wGYxJ__EM3LwRh4VS6zR6E,3232
@@ -89,7 +90,7 @@ zaber_motion/dto/ascii/response.py,sha256=VgQeOC2isJv6gHmqttdHZsOXf65DXhDGa3pIox
89
90
  zaber_motion/dto/ascii/servo_tuning_param.py,sha256=C8HBHWTUvwJbCYmmW8eaBmonbmyGzetb2sQ_oQI5B48,2065
90
91
  zaber_motion/dto/ascii/servo_tuning_paramset.py,sha256=pyWYfSWuMZY6h3nOVcPb-F2gYX9i3bMcC867PGh2ahw,320
91
92
  zaber_motion/dto/ascii/set_state_axis_response.py,sha256=DuE8olWJQAmP2OOGXijm4RCpEo26kBCUBeJrC3b3k4E,2820
92
- zaber_motion/dto/ascii/set_state_device_response.py,sha256=5p-P5kEe_dJfcHESed8v_2IJJ8I3Wi6GlhReGmC2MA0,3354
93
+ zaber_motion/dto/ascii/set_state_device_response.py,sha256=0xcaQuqpRfxO9snWEt3K7eA0PcCwwygV0gBX-RLo17U,3391
93
94
  zaber_motion/dto/ascii/simple_tuning.py,sha256=xHt91l5MWaRPg-cP0gT7nUEwiN-cdZLp01dnhDcGTAM,4454
94
95
  zaber_motion/dto/ascii/simple_tuning_param_definition.py,sha256=Ntlg9UYaAT54u4TJUEZaAzh5WFx5oqX3D2uJO9oVHms,3571
95
96
  zaber_motion/dto/ascii/stream_axis_definition.py,sha256=wllDMO25NOWTY1pO8qZg87pJu-zpMFTbZ6MEctu9Qq4,2551
@@ -150,7 +151,7 @@ zaber_motion/dto/product/__init__.py,sha256=M7m313pDn0mT99u1qPhrmit0N3wN3D3ylnIQ
150
151
  zaber_motion/dto/product/process_controller_mode.py,sha256=JSfKRAOKGWBXpKbUAvYy3IDGtWyRoz4c5sXKXpiHu_4,228
151
152
  zaber_motion/dto/product/process_controller_source.py,sha256=yz3yRp5AZP71bYB7ivY9q3ZuGIZkJ7hxt13G-XpPFyc,2577
152
153
  zaber_motion/dto/product/process_controller_source_sensor.py,sha256=z2nfX4jq79cAmnbr7Wz9GKKa1CoSZfEFakHgqfKpJoM,217
153
- zaber_motion/dto/requests/__init__.py,sha256=GJ12iZA3CAGp-G58G7s_goeEan7guaV2xYSKUNplgHo,22963
154
+ zaber_motion/dto/requests/__init__.py,sha256=v5x-eab0KwKVFBnSTrkXM-np1JPGXL9BhkFWXfanGT0,23260
154
155
  zaber_motion/dto/requests/alert_event_wrapper.py,sha256=B7zwY7iDrkXG1hjGHHjXgtC_rMSKG7Iok6_bG-do2g8,2394
155
156
  zaber_motion/dto/requests/autofocus_focus_request.py,sha256=3rZ5-s6dc6BV_DukDa-Fi2BL30QKAOd-K_9dP-QWOZ0,5272
156
157
  zaber_motion/dto/requests/autofocus_get_objective_params_request.py,sha256=0E0X4PuQVJ8Yt3LZzUC-nueGFQ-mEMpcSRUzf5ta6mw,5351
@@ -235,7 +236,7 @@ zaber_motion/dto/requests/double_response.py,sha256=8B0G4l30XwvpYmWdDL5od31oIH4c
235
236
  zaber_motion/dto/requests/driver_enable_request.py,sha256=zZaWJSGVgpKk43q1bIHHCzgA9lwNTC7DrWc_97Rvnh4,3362
236
237
  zaber_motion/dto/requests/empty_autofocus_request.py,sha256=jLgaZFfXj4d8yYyaqUQMH2-wL7691ncWFzY1Ezl6em4,4417
237
238
  zaber_motion/dto/requests/empty_request.py,sha256=LpxBSfVZ0EwouTZ6IOKnE8S4pcg0ZKXcmW6DZIly9Qg,1138
238
- zaber_motion/dto/requests/errors.py,sha256=Soj-BaBNLfnqA4I5UFolsKLidr-aiCGAYzIrDQBoNNM,1708
239
+ zaber_motion/dto/requests/errors.py,sha256=GfSjeCyPDq7_oa7I6IWsJYX_4EHNC32pk2pq6krftvw,1748
239
240
  zaber_motion/dto/requests/find_device_request.py,sha256=AUXpS2pnQqDMbgDGtqlzgBnbygeGMvhfXM2pVdRrjOk,2462
240
241
  zaber_motion/dto/requests/find_device_response.py,sha256=hoYoUKUVJvZvedousk-dqZ1GVzxneOQIMwoszf7z16c,1755
241
242
  zaber_motion/dto/requests/forget_devices_request.py,sha256=SZX_6nxaix8XHSXmBbs5ahkjdKm_33Y-bTHFWmF6WS8,3015
@@ -293,6 +294,8 @@ zaber_motion/dto/requests/oscilloscope_start_request.py,sha256=6VFGTeuq0Ej6AC2GE
293
294
  zaber_motion/dto/requests/prepare_command_request.py,sha256=msIbcbIl9wd3txrYiU2d4JM3t8rx-6DQbY9e985IAvM,4445
294
295
  zaber_motion/dto/requests/process_on.py,sha256=6GgTZUAOljage_Bu1vv_1tpeTeLVDUlM0f1Edm_RKw8,3807
295
296
  zaber_motion/dto/requests/pvt_csv_request.py,sha256=YjFTHsHWnfm3tDOXfVP75VSiC2167jd9wJ663qd7CRY,2142
297
+ zaber_motion/dto/requests/pvt_generate_positions_request.py,sha256=UzujVEAqL-fQMNJQrpusIMuefuDcC23WkuCCFOrrjv8,3177
298
+ zaber_motion/dto/requests/pvt_generate_velocities_request.py,sha256=MFIgb_kdh_vYJGBhEqCxZPYZGvAsc6D_rWf7nQ5R_0I,4362
296
299
  zaber_motion/dto/requests/pvt_load_csv_request.py,sha256=1LalBGodyuWCXcFeBdcgF4RflQ9BN2JT_4yXEeIPUwY,1468
297
300
  zaber_motion/dto/requests/pvt_point_request.py,sha256=xOltyiyRN4hdtRB-tzLuyLoLs2SDmPW5neO7sI4bGtM,6142
298
301
  zaber_motion/dto/requests/pvt_points_request.py,sha256=C-hYdDv43b3dLA5RSwOkFFDxnSeU1s_CpL0FL3kM8Ok,6324
@@ -387,6 +390,7 @@ zaber_motion/dto/requests/trigger_on_fire_set_request.py,sha256=lFkaCjn9p2dRvY0b
387
390
  zaber_motion/dto/requests/trigger_on_fire_set_to_setting_request.py,sha256=6pbbZSPAIB7G_2OOtNJ2DyaRTK9-6VkNSW0FwhbMaes,6476
388
391
  zaber_motion/dto/requests/trigger_set_label_request.py,sha256=zPrbfRYWpl9HL22JCRfLk7X43sADMJzek_Ec9mYQ6Ko,3477
389
392
  zaber_motion/dto/requests/trigger_states.py,sha256=ykIAvNpYpF9UQQl_YroPX3NOfF2twA2WRd9M5vosxco,2120
393
+ zaber_motion/dto/requests/unit_convert_unit_request.py,sha256=zL28hFH5J-ZaN6dVIBkNK_r-RdAZil7g7_G_BNlI9aM,2670
390
394
  zaber_motion/dto/requests/unit_get_enum_request.py,sha256=gSf9xq6l2V0EMSrLeMJup05KMjfHdHAXkZXvG5SomIc,1494
391
395
  zaber_motion/dto/requests/unit_get_enum_response.py,sha256=qGP73JheBg6iNZ20Nrbb2_mjvaNeS-T9MGdS63Fpr9c,1684
392
396
  zaber_motion/dto/requests/unit_get_symbol_request.py,sha256=E8KHcJp3LmuILwI3EPkAks7dACBnBib5joIhp33cAW8,1693
@@ -397,7 +401,7 @@ zaber_motion/dto/requests/wait_to_clear_warnings_request.py,sha256=0V0RDid4I6Qjj
397
401
  zaber_motion/dto/requests/wait_to_respond_request.py,sha256=pWObRotk-p2vV2RqrTxlFHXwFrjCDxYnU2ejdEhAJdw,2839
398
402
  zaber_motion/dto/requests/wdi_generic_request.py,sha256=Lcv859aSxWz3oiVzZNPLYqtihn-DCU8wJeNe9fwqpK8,5429
399
403
  zaber_motion/dto/requests/wdi_get_status_response.py,sha256=z3uWQm2B3ILVtdouXCFiAL3oR9DLq4TbsmdXuPBeics,1921
400
- zaber_motion/exceptions/__init__.py,sha256=Y9qES6cJpbQ_BjdQojhjOzXIYkADvzi0kbHQas9c3E4,8503
404
+ zaber_motion/exceptions/__init__.py,sha256=LjK4CSzpTGL4liTc5wfiVAStoIUfO_8bNRPfYQXl_5A,8634
401
405
  zaber_motion/exceptions/bad_command_exception.py,sha256=7Exn_kkVrmm8CtdGauCxNJsr_wP1d6CvMdQNUQraWsE,298
402
406
  zaber_motion/exceptions/bad_data_exception.py,sha256=bLksIisdtBiUVBxi4Jm9CIvdNF8NjZkKjORBTUOxx2o,336
403
407
  zaber_motion/exceptions/binary_command_failed_exception.py,sha256=1LaLjeoJte5EGrb6Oa90WdLwovW0rLfMA_FEemnp6X4,976
@@ -444,6 +448,7 @@ zaber_motion/exceptions/pvt_execution_exception.py,sha256=IYkQnOhM_SvhUcZxiG6DHw
444
448
  zaber_motion/exceptions/pvt_mode_exception.py,sha256=xO9cRUZ3ER6pFnody8pkRxZjLL6whPWK9_r3e0l-tIM,326
445
449
  zaber_motion/exceptions/pvt_movement_failed_exception.py,sha256=J3zsLTukIo_35lzQSVBCupgDL51qkVpVF7H2iS0j94E,959
446
450
  zaber_motion/exceptions/pvt_movement_interrupted_exception.py,sha256=0_79cwFfg0VQuVNhtuNzGRrJurr2uKqV9oxSZxd9w7s,1021
451
+ zaber_motion/exceptions/pvt_sequence_generation_failed_exception.py,sha256=yQIJPrOFnRl2-IuOyN2P4FE3W1TUNZ4poThKeWEbweA,325
447
452
  zaber_motion/exceptions/pvt_setup_failed_exception.py,sha256=HfxYv0q7XGB_EmNAHygsWk8-SmZIGRgGGe299mTpEB4,285
448
453
  zaber_motion/exceptions/remote_mode_exception.py,sha256=PQh6YuLYFYQNIa_okaCVqRlhFot4PsDq96w6Zid6nIY,423
449
454
  zaber_motion/exceptions/request_timeout_exception.py,sha256=FTMm2OKtabLJyxuoqDvGreh1yVToEZel84pruI_J-ro,300
@@ -475,9 +480,9 @@ zaber_motion/microscopy/wdi_autofocus_provider.py,sha256=nQG0UdtEnUWa91YDi9OLnEy
475
480
  zaber_motion/product/__init__.py,sha256=lno0C-gLBsHNPGnjp6bbXHX0cEk27cA8uFjq5vzmE9Q,531
476
481
  zaber_motion/product/process.py,sha256=42wF55BvUcUY36_6HvpdWLC0b2ap6suoCItpR88pp14,27458
477
482
  zaber_motion/product/process_controller.py,sha256=a5BM42BP82gcHtub98SkUsxsRoKByNbYmaBXzRYT1ao,4185
478
- zaber_motion_bindings/zaber-motion-core-darwin-uni.dylib,sha256=f17WmbdIF-CBWTR5rBTusC557f9k2jhuTn_yjshiuU8,24994562
479
- zaber_motion-7.7.0.dist-info/LICENSE.txt,sha256=xNj9QcKqsI3WK5EBPeYbQAiDcnVe4xmIpCy65NYNVhA,109244
480
- zaber_motion-7.7.0.dist-info/METADATA,sha256=n1lEPb1nWi3Bs-D0j2Te9VeYjYuA5d_hGcGvZxy4J6o,127665
481
- zaber_motion-7.7.0.dist-info/WHEEL,sha256=XsmEfKMdB2yReC9plMyXBxhtkQEg2VDVwHfJppE9llo,110
482
- zaber_motion-7.7.0.dist-info/top_level.txt,sha256=ypgkPvPad6Oge50CT6unnvxCEliKUB6olL6CUUER1SA,51
483
- zaber_motion-7.7.0.dist-info/RECORD,,
483
+ zaber_motion_bindings/zaber-motion-core-darwin-uni.dylib,sha256=RsyDD8CqLStmYa2eeQm2YTHp3ja_q1hkxbHdEQS8s9c,28926242
484
+ zaber_motion-7.8.1.dist-info/LICENSE.txt,sha256=xNj9QcKqsI3WK5EBPeYbQAiDcnVe4xmIpCy65NYNVhA,109244
485
+ zaber_motion-7.8.1.dist-info/METADATA,sha256=-KlVp9Z5WnvahyE4Nskac-b_mn-qKo4CjiDSffCL_Qo,127665
486
+ zaber_motion-7.8.1.dist-info/WHEEL,sha256=XsmEfKMdB2yReC9plMyXBxhtkQEg2VDVwHfJppE9llo,110
487
+ zaber_motion-7.8.1.dist-info/top_level.txt,sha256=ypgkPvPad6Oge50CT6unnvxCEliKUB6olL6CUUER1SA,51
488
+ zaber_motion-7.8.1.dist-info/RECORD,,