def test_validate_operation_errors(): d = square_device(3, 3) class bad_op(cirq.Operation): def bad_op(self): pass def qubits(self): pass def with_qubits(self, new_qubits): pass with pytest.raises(ValueError, match="Unsupported operation"): d.validate_operation(bad_op()) not_on_device_op = cirq.parallel_gate_op( cirq.X, *[cirq.GridQubit(row, col) for col in range(4) for row in range(4)] ) with pytest.raises(ValueError, match="Qubit not on device"): d.validate_operation(not_on_device_op) with pytest.raises(ValueError, match="Too many qubits acted on in parallel by"): d.validate_operation(cirq.CCX.on(*d.qubit_list()[0:3])) with pytest.raises(ValueError, match="are too far away"): d.validate_operation(cirq.CZ.on(cirq.GridQubit(0, 0), cirq.GridQubit(2, 2))) with pytest.raises(ValueError, match="Unsupported operation"): d.validate_operation(cirq.parallel_gate_op(cirq.Z, *d.qubits)) with pytest.raises(ValueError, match="Unsupported operation"): d.validate_operation(cirq.parallel_gate_op(cirq.X, *d.qubit_list()[1:])) with pytest.raises(ValueError, match="Unsupported operation"): d.validate_operation( cirq.ParallelGate(cirq.MeasurementGate(1, key='a'), 4)(*d.qubit_list()[:4]) )
def test_validate_circuit_errors(): d = square_device(2, 2, max_controls=3) q00 = cirq.GridQubit(0, 0) q01 = cirq.GridQubit(0, 1) q10 = cirq.GridQubit(1, 0) q11 = cirq.GridQubit(1, 1) c = cirq.Circuit() c.append(cirq.parallel_gate_op(cirq.X, *d.qubits)) c.append(cirq.CCZ.on(q00, q01, q10)) c.append(cirq.parallel_gate_op(cirq.Z, q00, q01, q10)) m = cirq.Moment(cirq.X.on_each(q00, q01) + cirq.Z.on_each(q10, q11)) c.append(m) c.append(cirq.measure_each(*d.qubits)) d.validate_circuit(c) c.append(cirq.Moment([cirq.X.on(q00)])) with pytest.raises(ValueError, match="Non-empty moment after measurement"): d.validate_circuit(c)
def _parallel_gate_op(gate, qubits): return cirq.parallel_gate_op(gate, *qubits)
def test_parallel_gate_op(gate, num_copies): qubits = cirq.LineQubit.range(num_copies * gate.num_qubits()) assert cirq.parallel_gate_op(gate, *qubits) == cirq.ParallelGate( gate, num_copies).on(*qubits)