def test_single_qubit_measurement_to_proto_convert_invert_mask(): gate = cirq.MeasurementGate(1, 'test', invert_mask=(True, )) proto = operations_pb2.Operation(measurement=operations_pb2.Measurement( targets=[operations_pb2.Qubit(row=2, col=3)], key='test', invert_mask=[True])) assert_proto_dict_convert(gate, proto, cirq.GridQubit(2, 3))
def test_multi_qubit_measurement_to_proto(): gate = cirq.MeasurementGate(2, 'test') proto = operations_pb2.Operation(measurement=operations_pb2.Measurement( targets=[ operations_pb2.Qubit(row=2, col=3), operations_pb2.Qubit(row=3, col=4) ], key='test', )) assert_proto_dict_convert(gate, proto, cirq.GridQubit(2, 3), cirq.GridQubit(3, 4))
def test_single_qubit_measurement_to_proto_pad_invert_mask(): gate = cirq.MeasurementGate(2, 'test', invert_mask=(True, )) proto = operations_pb2.Operation(measurement=operations_pb2.Measurement( targets=[ operations_pb2.Qubit(row=2, col=3), operations_pb2.Qubit(row=2, col=4) ], key='test', invert_mask=[True, False], )) assert (programs.gate_to_proto( gate, (cirq.GridQubit(2, 3), cirq.GridQubit(2, 4)), delay=0) == proto)
def _measure_to_proto(gate: cirq.MeasurementGate, qubits: Sequence[cirq.Qid]): if len(qubits) == 0: raise ValueError('Measurement gate on no qubits.') invert_mask = None if gate.invert_mask: invert_mask = gate.invert_mask + (False, ) * (gate.num_qubits() - len(gate.invert_mask)) if invert_mask and len(invert_mask) != len(qubits): raise ValueError('Measurement gate had invert mask of length ' 'different than number of qubits it acts on.') return operations_pb2.Measurement( targets=[_qubit_to_proto(q) for q in qubits], key=cirq.measurement_key_name(gate), invert_mask=invert_mask, )