Пример #1
0
def test_decompose_unsupported_gate_deprecated():
    q0, q1, q2 = cirq.LineQubit.range(3)
    device = ionq.IonQAPIDevice(qubits=[q0, q1, q2])
    op = cirq.CCZ(q0, q1, q2)
    with pytest.raises(ValueError, match='not supported'):
        with cirq.testing.assert_deprecated('decompose_to_device', deadline='v0.15'):
            _ = device.decompose_operation(op)
Пример #2
0
def test_decompose_leaves_supported_alone_deprecated(gate):
    qubits = cirq.LineQubit.range(gate.num_qubits())
    device = ionq.IonQAPIDevice(qubits=qubits)
    operation = gate(*qubits)
    with cirq.testing.assert_deprecated('decompose_to_device',
                                        deadline='v0.15'):
        assert device.decompose_operation(operation) == operation
Пример #3
0
def test_decompose_single_qubit_matrix_gate():
    q = cirq.LineQubit(0)
    device = ionq.IonQAPIDevice(qubits=[q])
    for _ in range(100):
        gate = cirq.MatrixGate(cirq.testing.random_unitary(2))
        circuit = cirq.Circuit(gate(q))
        decomposed_circuit = cirq.Circuit(*device.decompose_operation(gate(q)))
        cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent(
            circuit, decomposed_circuit, atol=1e-8)
Пример #4
0
def test_validate_moment_valid():
    moment = cirq.Moment()
    q = 0
    all_qubits = []
    for gate in VALID_GATES:
        qubits = cirq.LineQubit.range(q, q + gate.num_qubits())
        all_qubits.extend(qubits)
        moment += [gate(*qubits)]
        q += gate.num_qubits()
    device = ionq.IonQAPIDevice(len(all_qubits))
    device.validate_moment(moment)
Пример #5
0
def test_validate_circuit_valid():
    qubits = cirq.LineQubit.range(10)
    device = ionq.IonQAPIDevice(qubits)
    for _ in range(100):
        circuit = cirq.testing.random_circuit(
            qubits=qubits,
            n_moments=3,
            op_density=0.5,
            gate_domain={gate: gate.num_qubits() for gate in VALID_GATES},
        )
        device.validate_circuit(circuit)
Пример #6
0
def test_decompose_two_qubit_matrix_gate_deprecated():
    q0, q1 = cirq.LineQubit.range(2)
    device = ionq.IonQAPIDevice(qubits=[q0, q1])
    for _ in range(10):
        gate = cirq.MatrixGate(cirq.testing.random_unitary(4))
        circuit = cirq.Circuit(gate(q0, q1))
        with cirq.testing.assert_deprecated('decompose_to_device', deadline='v0.15'):
            decomposed_circuit = cirq.Circuit(*device.decompose_operation(gate(q0, q1)))
        cirq.testing.assert_circuits_with_terminal_measurements_are_equivalent(
            circuit, decomposed_circuit, atol=1e-8
        )
        assert VALID_DECOMPOSED_GATES.validate(decomposed_circuit)
Пример #7
0
def test_validate_operation_qubit_not_on_device():
    device = ionq.IonQAPIDevice(qubits=[cirq.LineQubit(0)])
    with pytest.raises(ValueError, match='not on the device'):
        device.validate_operation(cirq.H(cirq.LineQubit(1)))
Пример #8
0
def test_validate_operation_no_gate():
    device = ionq.IonQAPIDevice(qubits=[])
    with pytest.raises(ValueError, match='no gates'):
        device.validate_operation(cirq.CircuitOperation(cirq.FrozenCircuit()))
Пример #9
0
def test_validate_operation_invalid(gate):
    qubits = cirq.LineQubit.range(gate.num_qubits())
    device = ionq.IonQAPIDevice(qubits=qubits)
    operation = gate(*qubits)
    with pytest.raises(ValueError, match='unsupported gate'):
        device.validate_operation(operation)
Пример #10
0
def test_validate_operation_valid(gate):
    qubits = cirq.LineQubit.range(gate.num_qubits())
    device = ionq.IonQAPIDevice(qubits=qubits)
    operation = gate(*qubits)
    device.validate_operation(operation)
Пример #11
0
def test_decompose_unsupported_gate():
    q0, q1, q2 = cirq.LineQubit.range(3)
    device = ionq.IonQAPIDevice(qubits=[q0, q1, q2])
    op = cirq.CCZ(q0, q1, q2)
    with pytest.raises(ValueError, match='not supported'):
        _ = device.decompose_operation(op)
Пример #12
0
def test_decompose_leaves_supported_alone(gate):
    qubits = cirq.LineQubit.range(gate.num_qubits())
    device = ionq.IonQAPIDevice(qubits=qubits)
    operation = gate(*qubits)
    assert device.decompose_operation(operation) == operation
Пример #13
0
def test_validate_moment_invalid(gate):
    qubits = cirq.LineQubit.range(gate.num_qubits())
    moment = cirq.Moment([gate(*qubits)])
    device = ionq.IonQAPIDevice(qubits=qubits)
    with pytest.raises(ValueError, match='unsupported gate'):
        device.validate_moment(moment)
Пример #14
0
def test_validate_operation_no_gate():
    device = ionq.IonQAPIDevice(qubits=[])
    with pytest.raises(ValueError, match='no gates'):
        device.validate_operation(cirq.GlobalPhaseOperation(1j))
Пример #15
0
def test_metadata():
    device = ionq.IonQAPIDevice(qubits=[cirq.LineQubit(0)])
    assert device.metadata.qubit_set == {cirq.LineQubit(0)}