From dfe16162681bcb3a9fc733e620e1f1587680beb3 Mon Sep 17 00:00:00 2001 From: Ryan Shaffer <3620100+rmshaffer@users.noreply.github.com> Date: Fri, 1 May 2026 10:54:59 -0400 Subject: [PATCH 1/2] fix: shallow-copy circuit instructions into initial branched path --- .../openqasm/program_context.py | 3 +- .../braket/default_simulator/test_mcm.py | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/braket/default_simulator/openqasm/program_context.py b/src/braket/default_simulator/openqasm/program_context.py index 0f74f562..592a83cd 100644 --- a/src/braket/default_simulator/openqasm/program_context.py +++ b/src/braket/default_simulator/openqasm/program_context.py @@ -15,6 +15,7 @@ from abc import ABC, abstractmethod from collections.abc import Iterable +from copy import copy from dataclasses import fields from functools import singledispatchmethod from typing import TYPE_CHECKING, Any @@ -1970,7 +1971,7 @@ def _initialize_paths_from_circuit(self) -> None: existing variables from the shared variable table to the path. """ initial_path = self._paths[0] - initial_path._instructions = list(self._circuit.instructions) + initial_path._instructions = [copy(ins) for ins in self._circuit.instructions] initial_path.shots = self._shots for name, value in self.variable_table.items(): diff --git a/test/unit_tests/braket/default_simulator/test_mcm.py b/test/unit_tests/braket/default_simulator/test_mcm.py index 9110ac9f..8c8c32c5 100644 --- a/test/unit_tests/braket/default_simulator/test_mcm.py +++ b/test/unit_tests/braket/default_simulator/test_mcm.py @@ -3284,6 +3284,39 @@ def test_measure_only_in_if_branch_z(self, simulator): assert counter == {"00": 1000} +class TestMCMNonContiguousClassicalIndices: + """MCMs that write non-contiguous classical indices.""" + + def test_minimal_unassigned_low_bit_stays_zero(self, simulator): + """Untouched ``q[0]`` stays 0 when only ``c[1]`` is assigned.""" + qasm = """ + OPENQASM 3.0; + qubit[2] q; + bit[2] c; + h q[1]; + c[1] = measure q[1]; + if (c[1]) { x q[1]; } + """ + result = simulator.run_openqasm(OpenQASMProgram(source=qasm, inputs={}), shots=2000) + counter = Counter(["".join(m) for m in result.measurements]) + assert counter == {"00": 2000}, f"Expected {{'00': 2000}}, got {dict(counter)}" + + def test_if_branch_preserves_captured_bit_position(self, simulator): + """``if (c[N])`` keeps the captured value at ``q[N]``'s position.""" + qasm = """ + OPENQASM 3.0; + qubit[3] q; + bit[3] c; + h q[1]; + c[1] = measure q[1]; + if (c[1]) { x q[2]; } + c[2] = measure q[2]; + """ + result = simulator.run_openqasm(OpenQASMProgram(source=qasm, inputs={}), shots=2000) + counter = Counter(["".join(m) for m in result.measurements]) + assert set(counter) == {"000", "011"}, f"Expected {{'000', '011'}}, got {dict(counter)}" + + class TestMCMBranchedInstructionRouting: """Cover branched-mode instruction routing (add_*_instruction, add_measure, etc.).""" From 515fd36c4cce9573c70e268350133b78c4848bab Mon Sep 17 00:00:00 2001 From: Ryan Shaffer <3620100+rmshaffer@users.noreply.github.com> Date: Fri, 1 May 2026 10:58:32 -0400 Subject: [PATCH 2/2] test: drop verbose assertion messages --- test/unit_tests/braket/default_simulator/test_mcm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unit_tests/braket/default_simulator/test_mcm.py b/test/unit_tests/braket/default_simulator/test_mcm.py index 8c8c32c5..4435cac7 100644 --- a/test/unit_tests/braket/default_simulator/test_mcm.py +++ b/test/unit_tests/braket/default_simulator/test_mcm.py @@ -3299,7 +3299,7 @@ def test_minimal_unassigned_low_bit_stays_zero(self, simulator): """ result = simulator.run_openqasm(OpenQASMProgram(source=qasm, inputs={}), shots=2000) counter = Counter(["".join(m) for m in result.measurements]) - assert counter == {"00": 2000}, f"Expected {{'00': 2000}}, got {dict(counter)}" + assert counter == {"00": 2000} def test_if_branch_preserves_captured_bit_position(self, simulator): """``if (c[N])`` keeps the captured value at ``q[N]``'s position.""" @@ -3314,7 +3314,7 @@ def test_if_branch_preserves_captured_bit_position(self, simulator): """ result = simulator.run_openqasm(OpenQASMProgram(source=qasm, inputs={}), shots=2000) counter = Counter(["".join(m) for m in result.measurements]) - assert set(counter) == {"000", "011"}, f"Expected {{'000', '011'}}, got {dict(counter)}" + assert set(counter) == {"000", "011"} class TestMCMBranchedInstructionRouting: