Closed
Description
Description of the issue
When a Circuit
contains multiple measurements under the same key but with varying sizes, the to_qasm
method improperly assigns the classical register size, resulting in a smaller than required register.
A potential solution includes �fixing this behavior directly or, throwing an exception for circuits with measurements of differing sizes being translated to OpenQASM, to prevent incorrect translations.
How to reproduce the issue
import cirq
qubits = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.measure(qubits[0], key='c'),
cirq.measure(qubits, key='c'),
)
# No issue
# circuit = cirq.Circuit(
# cirq.measure(qubits, key='c'),
# cirq.measure(qubits[0], key='c'),
# )
print(circuit.to_qasm())
Result:
// Generated from Cirq v1.3.0
OPENQASM 2.0;
include "qelib1.inc";
// Qubits: [q(0), q(1)]
qreg q[2];
creg m_c[1]; // Incorrectly suggests a single-bit register, expected size is 2
measure q[0] -> m_c[0];
// Gate: cirq.MeasurementGate(2, cirq.MeasurementKey(name='c'), ())
measure q[0] -> m_c[0];
measure q[1] -> m_c[1];
Cirq version
1.3.0
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done