예제 #1
0
def test_components() -> None:
    circ = qf.Circuit()
    circ += qf.H(0)
    circ += qf.H(1)
    dag = qf.DAGCircuit(circ)
    assert dag.component_nb() == 2

    circ += qf.CNot(0, 1)
    dag = qf.DAGCircuit(circ)
    assert dag.component_nb() == 1

    circ0 = qf.ghz_circuit([0, 2, 4, 6, 8])
    circ1 = qf.ghz_circuit([1, 3, 5, 7, 9])

    circ = circ0 + circ1
    dag = qf.DAGCircuit(circ)
    comps = dag.components()
    assert dag.component_nb() == 2
    assert len(comps) == 2

    circ0 = qf.Circuit(qf.QFTGate([0, 2, 4, 6]).decompose())
    circ1 = qf.ghz_circuit([1, 3, 5, 7])
    circ += circ0
    circ += circ1
    circ += qf.H(10)
    dag = qf.DAGCircuit(circ)
    comps = dag.components()
    assert dag.component_nb() == 3
    assert len(comps) == 3
예제 #2
0
def test_components():
    circ = qf.Circuit()
    circ += qf.H(0)
    circ += qf.H(1)
    dag = qf.DAGCircuit(circ)
    assert dag.component_nb() == 2

    circ += qf.CNOT(0, 1)
    dag = qf.DAGCircuit(circ)
    assert dag.component_nb() == 1

    circ0 = qf.ghz_circuit([0, 2, 4, 6, 8])
    circ1 = qf.ghz_circuit([1, 3, 5, 7, 9])

    circ = qf.Circuit()
    circ.extend(circ0)
    circ.extend(circ1)
    dag = qf.DAGCircuit(circ)
    comps = dag.components()
    assert dag.component_nb() == 2

    circ0 = qf.qft_circuit([0, 2, 4, 6])
    circ1 = qf.ghz_circuit([1, 3, 5, 7])
    circ.extend(circ0)
    circ.extend(circ1)
    circ += qf.H(10)
    dag = qf.DAGCircuit(circ)
    comps = dag.components()
    assert dag.component_nb() == 3
    assert len(comps) == 3
예제 #3
0
def test_moments() -> None:
    circ0 = qf.ghz_circuit(range(5))
    dag = qf.DAGCircuit(circ0)
    circ = dag.moments()
    assert circ.size() == dag.depth()

    circ1 = qf.Circuit([
        qf.Z(0),
        qf.Z(1),
        qf.Z(2),
        qf.CNot(0, 1),
        qf.Measure(0, 0),
        qf.Measure(1, 1),
        qf.Measure(2, 2),
    ])
    moments = qf.DAGCircuit(circ1).moments()
    print()
    print(moments)

    assert len(moments) == 3
    assert len(moments[0]) == 3  # type: ignore
    assert len(moments[1]) == 1  # type: ignore
    assert len(moments[2]) == 3  # type: ignore

    with pytest.warns(DeprecationWarning):
        _ = dag.layers()
예제 #4
0
def test_ascircuit() -> None:
    circ0 = qf.ghz_circuit(range(5))
    dag = qf.DAGCircuit(circ0)
    circ1 = qf.Circuit(dag)

    assert tuple(circ1.qubits) == (0, 1, 2, 3, 4)
    assert dag.qubits == circ0.qubits
    assert dag.qubit_nb == 5
예제 #5
0
def test_next_prev() -> None:
    circ = qf.ghz_circuit([0, 2, 4, 6, 8])
    elem = circ[3]
    dag = qf.DAGCircuit(circ)

    assert dag.next_element(elem, elem.qubits[1]) == circ[4]
    assert dag.prev_element(elem, elem.qubits[0]) == circ[2]

    assert dag.next_element(elem, elem.qubits[0]) == Out(4)
    assert dag.prev_element(elem, elem.qubits[1]) == In(6)
예제 #6
0
def test_depth() -> None:
    circ = qf.Circuit(qf.QFTGate([0, 1, 2, 3]).decompose())
    dag = qf.DAGCircuit(circ)
    assert dag.depth() == 8

    circ = qf.ghz_circuit(range(5))
    dag = qf.DAGCircuit(circ)
    assert dag.depth() == 5

    assert dag.depth(local=False) == 4
예제 #7
0
def test_depth():
    circ = qf.qft_circuit([0, 1, 2, 3])
    dag = qf.DAGCircuit(circ)
    assert dag.depth() == 8

    circ = qf.ghz_circuit(range(5))
    dag = qf.DAGCircuit(circ)
    assert dag.depth() == 5

    assert dag.depth(local=False) == 4
예제 #8
0
def test_str() -> None:
    circ0 = qf.ghz_circuit(range(5))
    dag = qf.DAGCircuit(circ0)
    string = str(dag)
    assert (string == """DAGCircuit
    H 0
    CNot 0 1
    CNot 1 2
    CNot 2 3
    CNot 3 4\
""")
예제 #9
0
def test_next():
    circ = qf.ghz_circuit([0, 2, 4, 6, 8])
    elem = circ.elements[3]
    dag = qf.DAGCircuit(circ)

    assert dag.next_element(elem, elem.qubits[1]) == circ.elements[4]
    assert dag.prev_element(elem, elem.qubits[0]) == circ.elements[2]

    # FIXME: out and in nodes should also be Operation's ?
    assert dag.next_element(elem, elem.qubits[0]) == ('out', 4)
    assert dag.prev_element(elem, elem.qubits[1]) == ('in', 6)
예제 #10
0
def test_qvm():
    circ = qf.ghz_circuit([0, 1, 2, 3])
    with qf.pyquil.local_qvm():
        qf.forest.qvm_run_and_measure(circ, 1)
예제 #11
0
def test_circuit_to_latex() -> None:
    qf.circuit_to_latex(qf.ghz_circuit(range(15)))
예제 #12
0
def test_ghz_circuit():
    N = 12
    qubits = list(range(N))
    circ = qf.ghz_circuit(qubits)
    circ.run()
예제 #13
0
from pyquil.quil import Program
from pyquil.gates import Z, CNOT, CZ, CCNOT


if shutil.which('pdflatex') is None:
    print('Failed: External dependency `pdflatex` not found.')
    sys.exit()

if shutil.which('pdftocairo') is None:
    print('Failed: External dependency `pdftocairo` not found. '
          'Install `poppler`.')
    sys.exit()

# Display Bell state preparation
qf.circuit_to_image(qf.ghz_circuit([0, 1])).show()

# 4-qubit GHZ state preparation
qf.circuit_to_image(qf.ghz_circuit([0, 1, 2, 3])).show()

# 4-qubit ripple add
circ = qf.addition_circuit(['a[0]', 'a[1]', 'a[2]', 'a[3]'],
                           ['b[0]', 'b[1]', 'b[2]', 'b[3]'],
                           ['cin', 'cout'])
order = ['cin', 'a[0]', 'b[0]', 'a[1]', 'b[1]', 'a[2]', 'b[2]', 'a[3]',
         'b[3]', 'cout']
latex = qf.circuit_to_latex(circ, order)
img = qf.render_latex(latex)
img.show()

# Visualize pyquil protoquil programs
예제 #14
0
def test_layers():
    circ0 = qf.ghz_circuit(range(5))
    dag = qf.DAGCircuit(circ0)
    layers = dag.layers()
    assert len(layers.elements) == dag.depth()