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)
Example #3
0
 def _parallel_gate_op(gate, qubits):
     return cirq.parallel_gate_op(gate, *qubits)
Example #4
0
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)