From 2b90a49e8ef5274e239ac57b91ddf3f1d6758710 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Fri, 7 Nov 2025 17:31:40 -0600 Subject: [PATCH 1/2] benchmarks: Add a read_all_available benchmark --- tests/benchmark/test_analog_stream_readers.py | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/benchmark/test_analog_stream_readers.py b/tests/benchmark/test_analog_stream_readers.py index 746336dd2..2f193c3fa 100644 --- a/tests/benchmark/test_analog_stream_readers.py +++ b/tests/benchmark/test_analog_stream_readers.py @@ -8,7 +8,7 @@ from pytest_benchmark.fixture import BenchmarkFixture from nidaqmx import Task -from nidaqmx.constants import WaveformAttributeMode +from nidaqmx.constants import READ_ALL_AVAILABLE, WaveformAttributeMode from nidaqmx.stream_readers._analog_multi_channel_reader import AnalogMultiChannelReader from nidaqmx.stream_readers._analog_single_channel_reader import ( AnalogSingleChannelReader, @@ -39,6 +39,18 @@ def test___analog_single_channel_reader___read_many_sample( benchmark(reader.read_many_sample, data, num_samples) +@pytest.mark.benchmark(group="analog_readers") +@pytest.mark.parametrize("num_samples", [1, 1000]) +def test___analog_single_channel_reader___read_all_available( + benchmark: BenchmarkFixture, ai_benchmark_task: Task, num_samples: int +) -> None: + reader = AnalogSingleChannelReader(ai_benchmark_task.in_stream) + # This test reads the whole buffer, which is 2x num_samples. + data = numpy.full(num_samples * 2, math.inf, dtype=numpy.float64) + + benchmark(reader.read_many_sample, data, READ_ALL_AVAILABLE) + + @pytest.mark.benchmark(group="analog_readers") @pytest.mark.parametrize("num_samples", [1, 1000]) @pytest.mark.parametrize( @@ -81,6 +93,19 @@ def test___analog_multi_channel_reader___read_many_sample( benchmark(reader.read_many_sample, data, num_samples) +@pytest.mark.benchmark(group="analog_readers") +@pytest.mark.parametrize("num_channels", [1, 2, 8]) +@pytest.mark.parametrize("num_samples", [1, 1000]) +def test___analog_multi_channel_reader___read_all_available( + benchmark: BenchmarkFixture, ai_benchmark_task: Task, num_channels: int, num_samples: int +) -> None: + reader = AnalogMultiChannelReader(ai_benchmark_task.in_stream) + # This test reads the whole buffer, which is 2x num_samples. + data = numpy.full((num_channels, num_samples * 2), math.inf, dtype=numpy.float64) + + benchmark(reader.read_many_sample, data, READ_ALL_AVAILABLE) + + @pytest.mark.benchmark(group="analog_readers") @pytest.mark.parametrize("num_channels", [1, 2, 8]) @pytest.mark.parametrize("num_samples", [1, 1000]) From e2efe97635a5bed6577b8e380f9edb895bfd40d4 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Mon, 10 Nov 2025 08:58:43 -0600 Subject: [PATCH 2/2] chore: Fix formatting --- tests/benchmark/test_analog_stream_readers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/benchmark/test_analog_stream_readers.py b/tests/benchmark/test_analog_stream_readers.py index 2f193c3fa..2e3e29b3d 100644 --- a/tests/benchmark/test_analog_stream_readers.py +++ b/tests/benchmark/test_analog_stream_readers.py @@ -47,7 +47,7 @@ def test___analog_single_channel_reader___read_all_available( reader = AnalogSingleChannelReader(ai_benchmark_task.in_stream) # This test reads the whole buffer, which is 2x num_samples. data = numpy.full(num_samples * 2, math.inf, dtype=numpy.float64) - + benchmark(reader.read_many_sample, data, READ_ALL_AVAILABLE)