Module redvox.api900.sensors.time_synchronization_sensor
This module contains classes and methods for working with time synchronization sensors.
Expand source code
"""
This module contains classes and methods for working with time synchronization sensors.
"""
import typing
import numpy
import redvox.api900.constants as constants
import redvox.api900.lib.api900_pb2 as api900_pb2
import redvox.api900.migrations as migrations
import redvox.api900.reader_utils as reader_utils
from redvox.api900.sensors.unevenly_sampled_channel import UnevenlySampledChannel
class TimeSynchronizationSensor:
"""High-level wrapper around time synchronization exchange.
It should be noted that this class only exposes a single method, payload values.
"""
def __init__(self, unevenly_sampled_channel: typing.Optional[UnevenlySampledChannel] = None):
"""
Initialized this class.
:param unevenly_sampled_channel: An unevenly sampled channel with time synchronization payload.
"""
if unevenly_sampled_channel is None:
self._unevenly_sampled_channel = UnevenlySampledChannel()
else:
self._unevenly_sampled_channel = UnevenlySampledChannel(unevenly_sampled_channel.protobuf_channel)
self._unevenly_sampled_channel.set_channel_types([api900_pb2.TIME_SYNCHRONIZATION])
def payload_type(self) -> str:
"""
Returns the internal protobuf payload type.
:return: The internal protobuf payload type.
"""
return self._unevenly_sampled_channel.get_payload_type()
def payload_values(self) -> numpy.ndarray:
"""
Returns the time synchronization exchanges as a numpy ndarray of integers.
:return: The time synchronization exchanges as a numpy ndarray of integers.
"""
return migrations.maybe_get_float(
self._unevenly_sampled_channel.get_payload(api900_pb2.TIME_SYNCHRONIZATION))
def set_payload_values(self, payload: typing.Union[typing.List[int], numpy.ndarray]) -> 'TimeSynchronizationSensor':
"""
Sets the time synch channel's payload.
:param payload: The payload.
:return: An instance of the sensor.
"""
self._unevenly_sampled_channel.set_payload(migrations.maybe_set_int(payload),
constants.PayloadType.INT64_PAYLOAD)
return self
def metadata(self) -> typing.List[str]:
"""
Returns this channel's metadata (if there is any) as a Python list.
:return: This channel's metadata (if there is any) as a Python list.
"""
return self._unevenly_sampled_channel.metadata
def set_metadata(self, data: typing.List[str]) -> 'TimeSynchronizationSensor':
"""
sets the metadata
:param data: metadata as list of strings
:return: An instance of itself.
"""
self._unevenly_sampled_channel.set_metadata(data)
return self
def metadata_as_dict(self) -> typing.Dict[str, str]:
"""
Returns this channel's metadata (if there is any) as a Python dictionary.
:return: This channel's metadata (if there is any) as a Python dictionary.
"""
return reader_utils.get_metadata_as_dict(self._unevenly_sampled_channel.metadata)
def set_metadata_as_dict(self, metadata_dict: typing.Dict[str, str]) -> 'TimeSynchronizationSensor':
"""
Sets the metadata.
:param metadata_dict: Metadata to set.
:return: An instance of self.
"""
self.set_metadata(reader_utils.metadata_dict_to_list(metadata_dict))
return self
def __str__(self):
return str(self._unevenly_sampled_channel)
def __eq__(self, other) -> bool:
return isinstance(other, TimeSynchronizationSensor) and len(self.diff(other)) == 0
# pylint: disable=W0212
def diff(self, other: 'TimeSynchronizationSensor') -> typing.List[str]:
"""
Compares two time synchronization sensors for differences.
:param other: The other sensor to compare with.
:return: A list of differences or an empty list if there are none.
"""
diffs = map(lambda tuple2: reader_utils.diff(tuple2[0], tuple2[1]), [
(self._unevenly_sampled_channel.channel_types, other._unevenly_sampled_channel.channel_types),
(self.payload_type(), other.payload_type()),
(self.metadata(), other.metadata()),
(self._unevenly_sampled_channel.payload, other._unevenly_sampled_channel.payload)
])
# Filter only out only the differences
diffs = filter(lambda tuple2: tuple2[0], diffs)
# Extract the difference string
diffs = map(lambda tuple2: tuple2[1], diffs)
return list(diffs)
Classes
class TimeSynchronizationSensor (unevenly_sampled_channel: Optional[UnevenlySampledChannel] = None)
-
High-level wrapper around time synchronization exchange.
It should be noted that this class only exposes a single method, payload values.
Initialized this class. :param unevenly_sampled_channel: An unevenly sampled channel with time synchronization payload.
Expand source code
class TimeSynchronizationSensor: """High-level wrapper around time synchronization exchange. It should be noted that this class only exposes a single method, payload values. """ def __init__(self, unevenly_sampled_channel: typing.Optional[UnevenlySampledChannel] = None): """ Initialized this class. :param unevenly_sampled_channel: An unevenly sampled channel with time synchronization payload. """ if unevenly_sampled_channel is None: self._unevenly_sampled_channel = UnevenlySampledChannel() else: self._unevenly_sampled_channel = UnevenlySampledChannel(unevenly_sampled_channel.protobuf_channel) self._unevenly_sampled_channel.set_channel_types([api900_pb2.TIME_SYNCHRONIZATION]) def payload_type(self) -> str: """ Returns the internal protobuf payload type. :return: The internal protobuf payload type. """ return self._unevenly_sampled_channel.get_payload_type() def payload_values(self) -> numpy.ndarray: """ Returns the time synchronization exchanges as a numpy ndarray of integers. :return: The time synchronization exchanges as a numpy ndarray of integers. """ return migrations.maybe_get_float( self._unevenly_sampled_channel.get_payload(api900_pb2.TIME_SYNCHRONIZATION)) def set_payload_values(self, payload: typing.Union[typing.List[int], numpy.ndarray]) -> 'TimeSynchronizationSensor': """ Sets the time synch channel's payload. :param payload: The payload. :return: An instance of the sensor. """ self._unevenly_sampled_channel.set_payload(migrations.maybe_set_int(payload), constants.PayloadType.INT64_PAYLOAD) return self def metadata(self) -> typing.List[str]: """ Returns this channel's metadata (if there is any) as a Python list. :return: This channel's metadata (if there is any) as a Python list. """ return self._unevenly_sampled_channel.metadata def set_metadata(self, data: typing.List[str]) -> 'TimeSynchronizationSensor': """ sets the metadata :param data: metadata as list of strings :return: An instance of itself. """ self._unevenly_sampled_channel.set_metadata(data) return self def metadata_as_dict(self) -> typing.Dict[str, str]: """ Returns this channel's metadata (if there is any) as a Python dictionary. :return: This channel's metadata (if there is any) as a Python dictionary. """ return reader_utils.get_metadata_as_dict(self._unevenly_sampled_channel.metadata) def set_metadata_as_dict(self, metadata_dict: typing.Dict[str, str]) -> 'TimeSynchronizationSensor': """ Sets the metadata. :param metadata_dict: Metadata to set. :return: An instance of self. """ self.set_metadata(reader_utils.metadata_dict_to_list(metadata_dict)) return self def __str__(self): return str(self._unevenly_sampled_channel) def __eq__(self, other) -> bool: return isinstance(other, TimeSynchronizationSensor) and len(self.diff(other)) == 0 # pylint: disable=W0212 def diff(self, other: 'TimeSynchronizationSensor') -> typing.List[str]: """ Compares two time synchronization sensors for differences. :param other: The other sensor to compare with. :return: A list of differences or an empty list if there are none. """ diffs = map(lambda tuple2: reader_utils.diff(tuple2[0], tuple2[1]), [ (self._unevenly_sampled_channel.channel_types, other._unevenly_sampled_channel.channel_types), (self.payload_type(), other.payload_type()), (self.metadata(), other.metadata()), (self._unevenly_sampled_channel.payload, other._unevenly_sampled_channel.payload) ]) # Filter only out only the differences diffs = filter(lambda tuple2: tuple2[0], diffs) # Extract the difference string diffs = map(lambda tuple2: tuple2[1], diffs) return list(diffs)
Methods
def diff(self, other: TimeSynchronizationSensor) ‑> List[str]
-
Compares two time synchronization sensors for differences. :param other: The other sensor to compare with. :return: A list of differences or an empty list if there are none.
Expand source code
def diff(self, other: 'TimeSynchronizationSensor') -> typing.List[str]: """ Compares two time synchronization sensors for differences. :param other: The other sensor to compare with. :return: A list of differences or an empty list if there are none. """ diffs = map(lambda tuple2: reader_utils.diff(tuple2[0], tuple2[1]), [ (self._unevenly_sampled_channel.channel_types, other._unevenly_sampled_channel.channel_types), (self.payload_type(), other.payload_type()), (self.metadata(), other.metadata()), (self._unevenly_sampled_channel.payload, other._unevenly_sampled_channel.payload) ]) # Filter only out only the differences diffs = filter(lambda tuple2: tuple2[0], diffs) # Extract the difference string diffs = map(lambda tuple2: tuple2[1], diffs) return list(diffs)
def metadata(self) ‑> List[str]
-
Returns this channel's metadata (if there is any) as a Python list. :return: This channel's metadata (if there is any) as a Python list.
Expand source code
def metadata(self) -> typing.List[str]: """ Returns this channel's metadata (if there is any) as a Python list. :return: This channel's metadata (if there is any) as a Python list. """ return self._unevenly_sampled_channel.metadata
def metadata_as_dict(self) ‑> Dict[str, str]
-
Returns this channel's metadata (if there is any) as a Python dictionary. :return: This channel's metadata (if there is any) as a Python dictionary.
Expand source code
def metadata_as_dict(self) -> typing.Dict[str, str]: """ Returns this channel's metadata (if there is any) as a Python dictionary. :return: This channel's metadata (if there is any) as a Python dictionary. """ return reader_utils.get_metadata_as_dict(self._unevenly_sampled_channel.metadata)
def payload_type(self) ‑> str
-
Returns the internal protobuf payload type. :return: The internal protobuf payload type.
Expand source code
def payload_type(self) -> str: """ Returns the internal protobuf payload type. :return: The internal protobuf payload type. """ return self._unevenly_sampled_channel.get_payload_type()
def payload_values(self) ‑> numpy.ndarray
-
Returns the time synchronization exchanges as a numpy ndarray of integers. :return: The time synchronization exchanges as a numpy ndarray of integers.
Expand source code
def payload_values(self) -> numpy.ndarray: """ Returns the time synchronization exchanges as a numpy ndarray of integers. :return: The time synchronization exchanges as a numpy ndarray of integers. """ return migrations.maybe_get_float( self._unevenly_sampled_channel.get_payload(api900_pb2.TIME_SYNCHRONIZATION))
def set_metadata(self, data: List[str]) ‑> TimeSynchronizationSensor
-
sets the metadata :param data: metadata as list of strings :return: An instance of itself.
Expand source code
def set_metadata(self, data: typing.List[str]) -> 'TimeSynchronizationSensor': """ sets the metadata :param data: metadata as list of strings :return: An instance of itself. """ self._unevenly_sampled_channel.set_metadata(data) return self
def set_metadata_as_dict(self, metadata_dict: Dict[str, str]) ‑> TimeSynchronizationSensor
-
Sets the metadata. :param metadata_dict: Metadata to set. :return: An instance of self.
Expand source code
def set_metadata_as_dict(self, metadata_dict: typing.Dict[str, str]) -> 'TimeSynchronizationSensor': """ Sets the metadata. :param metadata_dict: Metadata to set. :return: An instance of self. """ self.set_metadata(reader_utils.metadata_dict_to_list(metadata_dict)) return self
def set_payload_values(self, payload: Union[List[int], numpy.ndarray]) ‑> TimeSynchronizationSensor
-
Sets the time synch channel's payload. :param payload: The payload. :return: An instance of the sensor.
Expand source code
def set_payload_values(self, payload: typing.Union[typing.List[int], numpy.ndarray]) -> 'TimeSynchronizationSensor': """ Sets the time synch channel's payload. :param payload: The payload. :return: An instance of the sensor. """ self._unevenly_sampled_channel.set_payload(migrations.maybe_set_int(payload), constants.PayloadType.INT64_PAYLOAD) return self