Skip to content

ValueError: Measurement key missing when using classically controlled CircuitOperation with controlled subcircuit #7474

Open
@YaegakiY

Description

@YaegakiY

Describe the issue

Running the following code raises an unexpected ValueError: Measurement key c missing when testing classical control. The error only occurs when both controlled operations are included inside the subcircuit and when both optimize_for_target_gateset and stratified_circuit transformers are applied.

Explain how to reproduce the bug or problem

To reproduce:

import cirq
from cirq.transformers import *

q = cirq.LineQubit.range(3)
circuit = cirq.Circuit()

sub_circuit = cirq.Circuit()

sub_circuit.append(cirq.MSGate(rads=0.19634954084936207).on(q[0], q[1]).controlled_by(q[2]))
sub_circuit.append(cirq.H(q[1]).controlled_by(q[0]))

sub_op = cirq.CircuitOperation(sub_circuit.freeze()) 
circuit.append(cirq.measure(q[1], key="c"))
circuit.append(sub_op.with_classical_controls("c"))

circuit.append(cirq.measure(q, key="m"))

circuit = optimize_for_target_gateset(circuit)
circuit = stratified_circuit(circuit)

simulator = cirq.Simulator() 
result = simulator.run(circuit, repetitions=5)
print(result.histogram(key='m'))
Traceback (most recent call last): File "C:\Users\fuzzing_cirq\buggy_program\crash\fuzzing_4.py", line 26, in result = simulator.run(circuit, repetitions=5) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\work\sampler.py", line 68, in run return self.run_sweep(program, param_resolver, repetitions)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\sim\simulator.py", line 59, in run_sweep return list(self.run_sweep_iter(program, params, repetitions)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\sim\simulator.py", line 90, in run_sweep_iter records = self._run( ^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\sim\simulator_base.py", line 249, in _run for step_result in self._core_iterator( ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\sim\simulator_base.py", line 209, in _core_iterator protocols.act_on(op, sim_state) File "C:\Users\venv\Lib\site-packages\cirq\protocols\act_on_protocol.py", line 143, in act_on result = action_act_on(sim_state) if is_op else action_act_on(sim_state, qubits) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\ops\classically_controlled_operation.py", line 205, in _act_on_ if all(c.resolve(sim_state.classical_data) for c in self._conditions): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\ops\classically_controlled_operation.py", line 205, in if all(c.resolve(sim_state.classical_data) for c in self._conditions): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\venv\Lib\site-packages\cirq\value\condition.py", line 110, in resolve raise ValueError(f'Measurement key {self.key} missing when testing classical control') ValueError: Measurement key c missing when testing classical control

Tell us the version of Cirq where this happens

1.6.0.dev20250702012506

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/transformersgood first issueThis issue can be resolved by someone who is not familiar with the codebase. A good starting issue.kind/bug-reportSomething doesn't seem to work.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions