From 1c945f8245d5c299a6249bcad9887e43d26648a3 Mon Sep 17 00:00:00 2001 From: Christopher Wood Date: Fri, 7 Jan 2022 13:04:23 -0500 Subject: [PATCH] Fix bug with nested composite analysis --- .../framework/composite/composite_analysis.py | 9 +++------ .../notes/fix-nested-comp-66a2b8b6e3b404be.yaml | 5 +++++ test/test_composite.py | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/fix-nested-comp-66a2b8b6e3b404be.yaml diff --git a/qiskit_experiments/framework/composite/composite_analysis.py b/qiskit_experiments/framework/composite/composite_analysis.py index ddf6671cb8..8f4680bc21 100644 --- a/qiskit_experiments/framework/composite/composite_analysis.py +++ b/qiskit_experiments/framework/composite/composite_analysis.py @@ -96,13 +96,10 @@ def _run_analysis(self, experiment_data: ExperimentData): ) analysis_results.append(result) - # Add callback to wait for all component analysis to finish before returning + # Wait for all component analysis to finish before returning # the parent experiment analysis results - def _wait_for_components(experiment_data, component_ids): - for comp_id in component_ids: - experiment_data.child_data(comp_id).block_for_results() - - experiment_data.add_analysis_callback(_wait_for_components, component_ids=component_ids) + for comp_id in component_ids: + experiment_data.child_data(comp_id).block_for_results() return analysis_results, [] diff --git a/releasenotes/notes/fix-nested-comp-66a2b8b6e3b404be.yaml b/releasenotes/notes/fix-nested-comp-66a2b8b6e3b404be.yaml new file mode 100644 index 0000000000..8840e94d49 --- /dev/null +++ b/releasenotes/notes/fix-nested-comp-66a2b8b6e3b404be.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixes bug in :class:`.CompositeAnalysis` where analysis of nested + composite experiments could raise a RuntimeError. diff --git a/test/test_composite.py b/test/test_composite.py index c894a9fbd6..7d6fae2929 100644 --- a/test/test_composite.py +++ b/test/test_composite.py @@ -161,6 +161,20 @@ def test_composite_copy(self): self.check_attributes(new_instance) self.assertEqual(new_instance.parent_id, None) + def test_nested_composite(self): + """ + Test nested parallel experiments. + """ + exp1 = FakeExperiment([0, 2]) + exp2 = FakeExperiment([1, 3]) + exp3 = ParallelExperiment([exp1, exp2]) + exp4 = BatchExperiment([exp3, exp1]) + exp5 = ParallelExperiment([exp4, FakeExperiment([4])]) + nested_exp = BatchExperiment([exp5, exp3]) + expdata = nested_exp.run(FakeBackend()).block_for_results() + status = expdata.status() + self.assertEqual(status, "DONE") + def test_analysis_replace_results_true(self): """ Test replace results when analyzing composite experiment data