Source code for nidaqmx.system._collections.physical_channel_collection

from collections.abc import Sequence

from nidaqmx.error_codes import DAQmxErrors
from nidaqmx.errors import DaqError
from nidaqmx.system.physical_channel import (
    PhysicalChannel,
    _PhysicalChannelAlternateConstructor,
)
from nidaqmx.utils import flatten_channel_string, unflatten_channel_string


[docs] class PhysicalChannelCollection(Sequence): """Contains the collection of physical channels for a DAQmx device. This class defines methods that implements a container object. """ def __init__(self, device_name, interpreter): """Do not construct this object directly; instead, construct a nidaqmx.system.Device and use the appropriate property, such as device.ai_physical_channels.""" # noqa: W505 - doc line too long (166 > 100 characters) (auto-generated noqa) self._name = device_name self._interpreter = interpreter def __contains__( # noqa: D105 - Missing docstring in magic method (auto-generated noqa) self, item ): channel_names = self.channel_names if isinstance(item, str): items = unflatten_channel_string(item) return all([i in channel_names for i in items]) elif isinstance(item, PhysicalChannel): return item._name in channel_names return False def __eq__(self, other): # noqa: D105 - Missing docstring in magic method (auto-generated noqa) if isinstance(other, self.__class__): return self._name == other._name return False def __getitem__(self, index): """Indexes a subset of physical channels on this physical channel collection. Args: index: The value of the index. The following index types are supported: - str: Name of the physical channel, without the device name prefix, e.g. 'ai0'. You also can specify a string that contains a list or range of names to this input. If you have a list of names, use the DAQmx Flatten Channel String function to convert the list to a string. - int: Index/position of the physical channel in the collection. - slice: Range of the indexes/positions of physical channels in the collection. Returns: nidaqmx.system.physical_channel.PhysicalChannel: Indicates the subset of physical channels indexed. """ if isinstance(index, int): return _PhysicalChannelAlternateConstructor( self.channel_names[index], self._interpreter ) elif isinstance(index, slice): return [ _PhysicalChannelAlternateConstructor(channel, self._interpreter) for channel in self.channel_names[index] ] elif isinstance(index, str): requested_channels = unflatten_channel_string(index) # Ensure the channel names are fully qualified. If the channel is invalid, the user will get errors from the # noqa: W505 - doc line too long (120 > 100 characters) (auto-generated noqa) # channel objects on use. channels_to_use = [] for channel in requested_channels: if channel.startswith(f"{self._name}/"): channels_to_use.append(channel) else: channels_to_use.append(f"{self._name}/{channel}") if len(channels_to_use) == 1: return _PhysicalChannelAlternateConstructor(channels_to_use[0], self._interpreter) return [ _PhysicalChannelAlternateConstructor(channel, self._interpreter) for channel in channels_to_use ] else: raise DaqError( f'Invalid index type "{type(index)}" used to access collection.', DAQmxErrors.UNKNOWN, ) def __iter__(self): # noqa: D105 - Missing docstring in magic method (auto-generated noqa) for channel_name in self.channel_names: yield _PhysicalChannelAlternateConstructor(channel_name, self._interpreter) def __len__(self): # noqa: D105 - Missing docstring in magic method (auto-generated noqa) return len(self.channel_names) def __ne__(self, other): # noqa: D105 - Missing docstring in magic method (auto-generated noqa) return not self.__eq__(other) def __reversed__(self): # noqa: D105 - Missing docstring in magic method (auto-generated noqa) channel_names = self.channel_names channel_names.reverse() for channel_name in channel_names: yield _PhysicalChannelAlternateConstructor(channel_name, self._interpreter) @property def all(self): """nidaqmx.system.physical_channel.PhysicalChannel: Specifies a physical channel object that represents the entire list of physical channels on this channel collection.""" # noqa: W505 - doc line too long (179 > 100 characters) (auto-generated noqa) return _PhysicalChannelAlternateConstructor( flatten_channel_string(self.channel_names), self._interpreter ) @property def channel_names(self): """List[str]: Specifies the entire list of physical channels in this collection.""" raise NotImplementedError()
[docs] class AIPhysicalChannelCollection(PhysicalChannelCollection): """Contains the collection of analog input physical channels for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x231E) return unflatten_channel_string(val)
[docs] class AOPhysicalChannelCollection(PhysicalChannelCollection): """Contains the collection of analog output physical channels for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x231F) return unflatten_channel_string(val)
[docs] class CIPhysicalChannelCollection(PhysicalChannelCollection): """Contains the collection of counter input physical channels for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x2324) return unflatten_channel_string(val)
[docs] class COPhysicalChannelCollection(PhysicalChannelCollection): """Contains the collection of counter output physical channels for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x2325) return unflatten_channel_string(val)
[docs] class DILinesCollection(PhysicalChannelCollection): """Contains the collection of digital input lines for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x2320) return unflatten_channel_string(val)
[docs] class DOLinesCollection(PhysicalChannelCollection): """Contains the collection of digital output lines for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x2322) return unflatten_channel_string(val)
[docs] class DIPortsCollection(PhysicalChannelCollection): """Contains the collection of digital input ports for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x2321) return unflatten_channel_string(val)
[docs] class DOPortsCollection(PhysicalChannelCollection): """Contains the collection of digital output ports for a DAQmx device. This class defines methods that implements a container object. """ @property def channel_names( # noqa: D102 - Missing docstring in public method (auto-generated noqa) self, ): val = self._interpreter.get_device_attribute_string(self._name, 0x2323) return unflatten_channel_string(val)