From 346bd87517a3f76d09f4f64d182632bd69700d33 Mon Sep 17 00:00:00 2001 From: Samantha Ho Date: Thu, 30 Oct 2025 11:41:28 -0700 Subject: [PATCH 1/2] Bugfix: Nested LinSweepers --- src/qcodes/dataset/measurement_extensions.py | 1 + tests/dataset/test_measurement_extensions.py | 25 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/qcodes/dataset/measurement_extensions.py b/src/qcodes/dataset/measurement_extensions.py index 3634ebb062c7..9472d27a28d5 100644 --- a/src/qcodes/dataset/measurement_extensions.py +++ b/src/qcodes/dataset/measurement_extensions.py @@ -236,4 +236,5 @@ def __next__(self) -> float: self._iter_index += 1 return set_val else: + self._iter_index = 0 raise StopIteration diff --git a/tests/dataset/test_measurement_extensions.py b/tests/dataset/test_measurement_extensions.py index 34fd0e7abe30..87a342b7323f 100644 --- a/tests/dataset/test_measurement_extensions.py +++ b/tests/dataset/test_measurement_extensions.py @@ -1,4 +1,5 @@ import gc +import itertools from functools import partial from itertools import product from pathlib import Path @@ -238,6 +239,30 @@ def test_linsweeper(default_params, default_database_and_experiment): ) +def test_nested_linsweeper(default_params): + set1, set2, _, _, _, _ = default_params + linsweeper1 = LinSweeper(set1, 0, 1, 11, 0.001) + linsweeper2 = LinSweeper(set2, -1, 0, 6, 0.001) + data_pairs = [] + for _ in linsweeper1: + for _ in linsweeper2: + data_pairs.append([set1(), set2()]) + + assert len(data_pairs) == 11 * 6 + assert np.all( + np.isclose( + np.array(data_pairs), + np.array( + list( + itertools.product( + linsweeper1.get_setpoints(), linsweeper2.get_setpoints() + ) + ) + ), + ) + ) + + def test_context_with_pws(pws_params, default_database_and_experiment): _ = default_database_and_experiment pws1, set1 = pws_params From 0ffea17ec3f57711f1ff7fd98ffc7aac9017001b Mon Sep 17 00:00:00 2001 From: Samantha Ho Date: Thu, 30 Oct 2025 11:50:38 -0700 Subject: [PATCH 2/2] Add newsfragment --- docs/changes/newsfragments/7607.improved | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 docs/changes/newsfragments/7607.improved diff --git a/docs/changes/newsfragments/7607.improved b/docs/changes/newsfragments/7607.improved new file mode 100644 index 000000000000..b6ad14384662 --- /dev/null +++ b/docs/changes/newsfragments/7607.improved @@ -0,0 +1,2 @@ +Fixes a bug in the LinSweeper iterator that caused it to always raise StopIteration after +completing a single sweep. This bug meant LinSweeper could not be used in a nested measurement function.