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
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
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()
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
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)
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
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
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\ """)
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)
def test_qvm(): circ = qf.ghz_circuit([0, 1, 2, 3]) with qf.pyquil.local_qvm(): qf.forest.qvm_run_and_measure(circ, 1)
def test_circuit_to_latex() -> None: qf.circuit_to_latex(qf.ghz_circuit(range(15)))
def test_ghz_circuit(): N = 12 qubits = list(range(N)) circ = qf.ghz_circuit(qubits) circ.run()
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
def test_layers(): circ0 = qf.ghz_circuit(range(5)) dag = qf.DAGCircuit(circ0) layers = dag.layers() assert len(layers.elements) == dag.depth()