Пример #1
0
def test_pauli_string_dag_from_circuit(repetition):
    q0, q1, q2 = cirq.LineQubit.range(3)
    c_orig = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2)
    c_left, _ = convert_and_separate_circuit(c_orig)

    c_left_dag = pauli_string_dag_from_circuit(c_left)
    c_left_reordered = c_left_dag.to_circuit()

    cirq.testing.assert_allclose_up_to_global_phase(c_left.unitary(),
                                                    c_left_reordered.unitary(),
                                                    atol=1e-7)
Пример #2
0
def test_pauli_string_dag_from_circuit(repetition):
    q0, q1, q2 = cirq.LineQubit.range(3)
    c_orig = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2)
    c_left, _ = convert_and_separate_circuit(c_orig)

    c_left_dag = pauli_string_dag_from_circuit(c_left)
    c_left_reordered = c_left_dag.to_circuit()

    cirq.testing.assert_allclose_up_to_global_phase(
        c_left.to_unitary_matrix(),
        c_left_reordered.to_unitary_matrix(),
        atol=1e-7)
Пример #3
0
def test_toffoli_separate():
    q0, q1, q2 = cirq.LineQubit.range(3)
    circuit = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2)

    c_left, c_right = convert_and_separate_circuit(circuit)

    cirq.testing.assert_allclose_up_to_global_phase(
        circuit.unitary(), (c_left + c_right).unitary(), atol=1e-7)

    assert all(
        isinstance(op, cirq.PauliStringPhasor)
        for op in c_left.all_operations())
    assert all(
        isinstance(op, cirq.GateOperation)
        and isinstance(op.gate, (cirq.SingleQubitCliffordGate, cirq.CZPowGate))
        for op in c_right.all_operations())
Пример #4
0
def test_toffoli_separate():
    circuit = nonoptimal_toffoli_circuit()

    c_left, c_right = convert_and_separate_circuit(circuit)

    cirq.testing.assert_allclose_up_to_global_phase(
        circuit.to_unitary_matrix(),
        (c_left + c_right).to_unitary_matrix(),
        atol=1e-7,
    )

    assert all(
        isinstance(op, PauliStringPhasor) for op in c_left.all_operations())
    assert all(
        isinstance(op, cirq.GateOperation)
        and isinstance(op.gate, (cirq.CliffordGate, cirq.PauliInteractionGate))
        for op in c_right.all_operations())
Пример #5
0
def test_toffoli_separate():
    q0, q1, q2 = cirq.LineQubit.range(3)
    circuit = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2)

    c_left, c_right = convert_and_separate_circuit(circuit)

    cirq.testing.assert_allclose_up_to_global_phase(
        circuit.to_unitary_matrix(),
        (c_left + c_right).to_unitary_matrix(),
        atol=1e-7,
    )

    assert all(isinstance(op, PauliStringPhasor)
               for op in c_left.all_operations())
    assert all(isinstance(op, cirq.GateOperation) and
               isinstance(op.gate, (cirq.CliffordGate,
                                    cirq.PauliInteractionGate))
               for op in c_right.all_operations())
Пример #6
0
def test_move_non_clifford_into_clifford():
    q0, q1, q2 = cirq.LineQubit.range(3)
    c_orig = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2)

    c_left, c_right = convert_and_separate_circuit(c_orig)

    # Normally, c_left would be optimized here
    c_left_dag = pauli_string_dag_from_circuit(c_left)

    c_recombined1 = move_pauli_strings_into_circuit(c_left, c_right)
    c_recombined2 = move_pauli_strings_into_circuit(c_left_dag, c_right)

    _assert_no_multi_qubit_pauli_strings(c_recombined1)
    _assert_no_multi_qubit_pauli_strings(c_recombined2)

    baseline_len = len(cirq.google.optimized_for_xmon(c_orig))
    opt_len1 = len(cirq.google.optimized_for_xmon(c_recombined1))
    opt_len2 = len(cirq.google.optimized_for_xmon(c_recombined2))
    assert opt_len1 <= baseline_len
    assert opt_len2 <= baseline_len
Пример #7
0
def test_move_non_clifford_into_clifford():
    q0, q1, q2 = cirq.LineQubit.range(3)
    c_orig = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2)

    c_left, c_right = convert_and_separate_circuit(c_orig)

    # Normally, c_left would be optimized here
    c_left_dag = pauli_string_dag_from_circuit(c_left)

    c_recombined1 = move_non_clifford_into_clifford(c_left, c_right)
    c_recombined2 = move_non_clifford_into_clifford(c_left_dag, c_right)

    _assert_no_multi_qubit_pauli_strings(c_recombined1)
    _assert_no_multi_qubit_pauli_strings(c_recombined2)

    baseline_len = len(cirq.google.optimized_for_xmon(c_orig))
    opt_len1 = len(cirq.google.optimized_for_xmon(c_recombined1))
    opt_len2 = len(cirq.google.optimized_for_xmon(c_recombined2))
    assert opt_len1 <= baseline_len
    assert opt_len2 <= baseline_len
Пример #8
0
def test_move_non_clifford_into_clifford():
    cg = pytest.importorskip("cirq_google")
    q0, q1, q2 = cirq.LineQubit.range(3)
    c_orig = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2)

    c_left, c_right = convert_and_separate_circuit(c_orig)

    # Normally, c_left would be optimized here
    c_left_dag = pauli_string_dag_from_circuit(c_left)

    c_recombined1 = move_pauli_strings_into_circuit(c_left, c_right)
    c_recombined2 = move_pauli_strings_into_circuit(c_left_dag, c_right)

    _assert_no_multi_qubit_pauli_strings(c_recombined1)
    _assert_no_multi_qubit_pauli_strings(c_recombined2)

    with cirq.testing.assert_deprecated('Use cirq.optimize_for_target_gateset',
                                        deadline='v0.16',
                                        count=None):
        baseline_len = len(cg.optimized_for_xmon(c_orig))
        opt_len1 = len(cg.optimized_for_xmon(c_recombined1))
        opt_len2 = len(cg.optimized_for_xmon(c_recombined2))
        assert opt_len1 <= baseline_len
        assert opt_len2 <= baseline_len