From fff3583d4a29d35f836af26c6cb9685a91d7b112 Mon Sep 17 00:00:00 2001 From: En Yi Tee Date: Wed, 8 Oct 2025 13:03:55 +0800 Subject: [PATCH 1/4] Speed up stream reader verify function Use self._in_strea.num_chans to get number of channels --- src/handwritten/stream_readers/_channel_reader_base.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/handwritten/stream_readers/_channel_reader_base.py b/src/handwritten/stream_readers/_channel_reader_base.py index ba0300bb..2b7ad00d 100644 --- a/src/handwritten/stream_readers/_channel_reader_base.py +++ b/src/handwritten/stream_readers/_channel_reader_base.py @@ -56,8 +56,7 @@ def _verify_array(self, data, number_of_samples_per_channel, is_many_chan, is_ma if not self._verify_array_shape: return - channels_to_read = self._in_stream.channels_to_read - number_of_channels = len(channels_to_read.channel_names) + number_of_channels = self._in_stream.num_chans array_shape: tuple[int, ...] | None = None if is_many_chan: @@ -100,8 +99,7 @@ def _verify_array_digital_lines(self, data, is_many_chan, is_many_line): if not self._verify_array_shape: return - channels_to_read = self._in_stream.channels_to_read - number_of_channels = len(channels_to_read.channel_names) + number_of_channels = self._in_stream.num_chans number_of_lines = self._in_stream.di_num_booleans_per_chan array_shape: tuple[int, ...] | None = None From ef75e3b23df394d11ab736606a25f2b4f9146719 Mon Sep 17 00:00:00 2001 From: En Yi Tee Date: Wed, 8 Oct 2025 14:36:30 +0800 Subject: [PATCH 2/4] Apply similar modification to writer --- src/handwritten/stream_writers/_channel_writer_base.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/handwritten/stream_writers/_channel_writer_base.py b/src/handwritten/stream_writers/_channel_writer_base.py index f631a220..93a00d59 100644 --- a/src/handwritten/stream_writers/_channel_writer_base.py +++ b/src/handwritten/stream_writers/_channel_writer_base.py @@ -93,8 +93,7 @@ def _verify_array(self, data, is_many_chan, is_many_samp): if not self._verify_array_shape: return - channels_to_write = self._task.channels - number_of_channels = len(channels_to_write.channel_names) + number_of_channels = self._out_stream.num_chans expected_num_dimensions = None if is_many_chan: @@ -130,8 +129,7 @@ def _verify_array_digital_lines(self, data, is_many_chan, is_many_line): if not self._verify_array_shape: return - channels_to_write = self._task.channels - number_of_channels = len(channels_to_write.channel_names) + number_of_channels = self._out_stream.num_chans number_of_lines = self._out_stream.do_num_booleans_per_chan expected_num_dimensions = None From 87c3334a2376c07c54313ff2757a7bdc75e86d5f Mon Sep 17 00:00:00 2001 From: En Yi Tee Date: Fri, 10 Oct 2025 10:54:59 +0800 Subject: [PATCH 3/4] Generate the code --- generated/nidaqmx/stream_readers/_channel_reader_base.py | 6 ++---- generated/nidaqmx/stream_writers/_channel_writer_base.py | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/generated/nidaqmx/stream_readers/_channel_reader_base.py b/generated/nidaqmx/stream_readers/_channel_reader_base.py index ba0300bb..2b7ad00d 100644 --- a/generated/nidaqmx/stream_readers/_channel_reader_base.py +++ b/generated/nidaqmx/stream_readers/_channel_reader_base.py @@ -56,8 +56,7 @@ def _verify_array(self, data, number_of_samples_per_channel, is_many_chan, is_ma if not self._verify_array_shape: return - channels_to_read = self._in_stream.channels_to_read - number_of_channels = len(channels_to_read.channel_names) + number_of_channels = self._in_stream.num_chans array_shape: tuple[int, ...] | None = None if is_many_chan: @@ -100,8 +99,7 @@ def _verify_array_digital_lines(self, data, is_many_chan, is_many_line): if not self._verify_array_shape: return - channels_to_read = self._in_stream.channels_to_read - number_of_channels = len(channels_to_read.channel_names) + number_of_channels = self._in_stream.num_chans number_of_lines = self._in_stream.di_num_booleans_per_chan array_shape: tuple[int, ...] | None = None diff --git a/generated/nidaqmx/stream_writers/_channel_writer_base.py b/generated/nidaqmx/stream_writers/_channel_writer_base.py index f631a220..93a00d59 100644 --- a/generated/nidaqmx/stream_writers/_channel_writer_base.py +++ b/generated/nidaqmx/stream_writers/_channel_writer_base.py @@ -93,8 +93,7 @@ def _verify_array(self, data, is_many_chan, is_many_samp): if not self._verify_array_shape: return - channels_to_write = self._task.channels - number_of_channels = len(channels_to_write.channel_names) + number_of_channels = self._out_stream.num_chans expected_num_dimensions = None if is_many_chan: @@ -130,8 +129,7 @@ def _verify_array_digital_lines(self, data, is_many_chan, is_many_line): if not self._verify_array_shape: return - channels_to_write = self._task.channels - number_of_channels = len(channels_to_write.channel_names) + number_of_channels = self._out_stream.num_chans number_of_lines = self._out_stream.do_num_booleans_per_chan expected_num_dimensions = None From 6350f83b3e1793bbf6e3adc1e7e4676a04b8e85b Mon Sep 17 00:00:00 2001 From: En Yi Tee Date: Mon, 13 Oct 2025 08:59:10 +0800 Subject: [PATCH 4/4] Update CHANGELOG.md - as per Brad's comment, it affects all read and write functions, thus may need to let user know this --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd8e457b..2568cd0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,7 @@ All notable changes to this project will be documented in this file. * [Full changelog: 1.2.0...1.3.0](https://github.com/ni/nidaqmx-python/compare/1.2.0...1.3.0) * ### Resolved Issues - * ... + * [843: read methods use task.in_stream.channels_to_read, which is slow](https://github.com/ni/nidaqmx-python/issues/843) * ### Major Changes * (IN PROGRESS behind "WAVEFORM_SUPPORT" feature toggle) Added support for reading and writing Waveform data.