def test_empty_circuit(self):
        qc = QuantumCircuit()
        filename = self._get_resource_path('current_pulse_matplotlib_ref.png')
        visualization.circuit_drawer(qc, output='mpl', filename=filename)
        self.addCleanup(os.remove, filename)

        expected_filename = self._get_resource_path(
            'expected_current_pulse_matplotlib_ref.png')
        expected = self._expected_empty()
        expected.savefig(expected_filename)
        self.addCleanup(os.remove, expected_filename)

        self.assertImagesAreEqual(filename, expected_filename)
예제 #2
0
    def test_4597(self):
        """Test cregbundle and conditional gates.
        See: https://github.com/Qiskit/qiskit-terra/pull/4597"""
        filename = self._get_resource_path("test_latex_4597.tex")
        qr = QuantumRegister(3, "q")
        cr = ClassicalRegister(3, "c")
        circuit = QuantumCircuit(qr, cr)
        circuit.x(qr[2]).c_if(cr, 2)
        circuit.draw(output="latex_source", cregbundle=True)

        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
    def test_cswap_rzz(self):
        """Test controlled swap and rzz gates"""
        filename = self._get_resource_path("test_latex_cswap_rzz.tex")
        qr = QuantumRegister(5, "q")
        circuit = QuantumCircuit(qr)
        circuit.x(0)
        circuit.x(1)
        circuit.cswap(0, 1, 2)
        circuit.append(RZZGate(3 * pi / 4).control(3, ctrl_state="010"), [2, 1, 4, 3, 0])

        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #4
0
    def test_meas_condition(self):
        """Tests measure with a condition"""

        filename = self._get_resource_path("test_latex_meas_condition.tex")
        qr = QuantumRegister(2, "qr")
        cr = ClassicalRegister(2, "cr")
        circuit = QuantumCircuit(qr, cr)
        circuit.h(qr[0])
        circuit.measure(qr[0], cr[0])
        circuit.h(qr[1]).c_if(cr, 1)
        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #5
0
 def test_huge_circuit(self):
     """Test draw huge circuit."""
     filename = self._get_resource_path('test_huge.tex')
     qc = QuantumCircuit(40)
     for qubit in range(39):
         qc.h(qubit)
         qc.cx(qubit, 39)
     try:
         circuit_drawer(qc, filename=filename, output='latex_source')
         self.assertNotEqual(os.path.exists(filename), False)
     finally:
         if os.path.exists(filename):
             os.remove(filename)
    def test_no_barriers_false(self):
        """Generate the same circuit as test_plot_barriers but without the barrier commands
        as this is what the circuit should look like when displayed with plot barriers false"""
        filename = self._get_resource_path("test_latex_no_barriers_false.tex")
        q1 = QuantumRegister(2, "q")
        c1 = ClassicalRegister(2, "c")
        circuit = QuantumCircuit(q1, c1)
        circuit.h(q1[0])
        circuit.h(q1[1])

        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #7
0
def experiment_one_state_create(back_ibm, back_sim):
    """
    The goal of this experiment is to investigate if the same set of CNOTs introduces
    more errors when executed in parallel or sequentially.

    Therefore, two logical qubits are considered
    q_1 = |111000>
    q_2 = |000111>

    The states have been chosen based on the topology of ibmq_16_melbourne with 6 qubits on the top row,
    and 6 qubits on the lower row. Qubits Q0 (top-left) and Q7 (bottom-right) are not used for this experiment.


    Six CNOTs are executed between q_1 and q_2. The individual CNOTs are executed in SEQ and PAR.
    SEQ has barriers between the CNOTs, while PAR assumes that all six CNOTs parallel.

    Note: It could be that X errors introduced by the CNOTs cancel out or are cascading.
    Nevertheless, it is interesting to observe what the codeword at the end of the experiment is.

    At the end the qubits are measured. The perfect state should be
    q_1=|111111>
    q_2=|111111>

    The scripts in resanalysis.py can analyse the measurement results and compute
    * the incidence of measuring the perfect |q_1q_2> = |1111111_111111_> where _ (underscore) is Q0 and Q7
    * the cumulated incidence of distances D (e.g. 1) basis from the perfect |q_1q_2>
    """

    parallel_cnots = ['CX13_1', 'CX12_2', 'CX11_3', 'CX4_10', 'CX5_9', 'CX6_8']

    qc_seq = create_circuit_one_create(run_sequential_experiment=True,
                                       list_of_cnots=parallel_cnots)

    #
    res_seqs = run_on_ibm(qc_seq, back_sim)
    print(' --- SIM')
    print(res_seqs.to_dict())
    #
    res_seq = run_on_ibm(qc_seq, back_ibm)
    print(' --- SEQ')
    print(res_seq.to_dict())

    qc_par = create_circuit_one_create(run_sequential_experiment=False,
                                       list_of_cnots=parallel_cnots)
    res_par = run_on_ibm(qc_par, back_ibm)
    print(' --- PAR')
    print(res_par.to_dict())

    # Print the ASCII circuits
    print(circuit_drawer(qc_seq, line_length=-1))
    print(circuit_drawer(qc_par, line_length=-1))
예제 #8
0
    def test_registerless_one_bit(self):
        """Text circuit with one-bit registers and registerless bits."""
        from qiskit.circuit import Qubit, Clbit

        filename = self._get_resource_path(
            "test_latex_registerless_one_bit.tex")
        qrx = QuantumRegister(2, "qrx")
        qry = QuantumRegister(1, "qry")
        crx = ClassicalRegister(2, "crx")
        circuit = QuantumCircuit(qrx, [Qubit(), Qubit()], qry,
                                 [Clbit(), Clbit()], crx)
        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #9
0
 def test_conditions_with_bits_reverse(self):
     """Test that gates with conditions and measures work with bits reversed"""
     filename = self._get_resource_path("test_latex_cond_reverse.tex")
     bits = [Qubit(), Qubit(), Clbit(), Clbit()]
     cr = ClassicalRegister(2, "cr")
     crx = ClassicalRegister(3, "cs")
     circuit = QuantumCircuit(bits, cr, [Clbit()], crx)
     circuit.x(0).c_if(bits[3], 0)
     circuit_drawer(circuit,
                    cregbundle=False,
                    reverse_bits=True,
                    filename=filename,
                    output="latex_source")
     self.assertEqualToReference(filename)
예제 #10
0
def adder_latex(a, b, n):
    qr_a = QuantumRegister(n, name='a')
    qr_b = QuantumRegister(n, name='b')
    qc = QuantumCircuit(qr_a, qr_b)
    qc.append(QFT(n), qargs=qr_b[:])
    for i in range(0, n):
        for j in range(0, n - i):
            qc.append(c_phase(j + 1).control(), qargs=[qr_a[j]] + [qr_b[i]])
        qc.barrier()
    qc.append(QFT(n, inverse=True), qargs=qr_b[:])
    circuit_drawer(qc,
                   output='latex_source',
                   filename='./latex/test.tex',
                   plot_barriers=False)
예제 #11
0
    def test_cnot(self):
        """Test different cnot gates (ccnot, mcx, etc)"""
        filename = self._get_resource_path('test_latex_cnot.tex')
        qr = QuantumRegister(5, 'q')
        circuit = QuantumCircuit(qr)
        circuit.x(0)
        circuit.cx(0, 1)
        circuit.ccx(0, 1, 2)
        circuit.append(XGate().control(3, ctrl_state='010'), [qr[2], qr[3], qr[0], qr[1]])
        circuit.append(MCXGate(num_ctrl_qubits=3, ctrl_state='101'), [qr[0], qr[1], qr[2], qr[4]])

        circuit_drawer(circuit, filename=filename, output='latex_source')

        self.assertEqualToReference(filename)
예제 #12
0
    def test_reverse_bits(self):
        """Tests reverse_bits parameter"""
        filename = self._get_resource_path("test_latex_reverse_bits.tex")
        circuit = QuantumCircuit(3)
        circuit.h(0)
        circuit.cx(0, 1)
        circuit.ccx(2, 1, 0)

        circuit_drawer(circuit,
                       filename=filename,
                       output="latex_source",
                       reverse_bits=True)

        self.assertEqualToReference(filename)
 def test_measures_with_conditions_with_bits(self):
     """Condition and measure on single bits cregbundle true"""
     filename1 = self._get_resource_path("test_latex_meas_cond_bits_false.tex")
     filename2 = self._get_resource_path("test_latex_meas_cond_bits_true.tex")
     bits = [Qubit(), Qubit(), Clbit(), Clbit()]
     cr = ClassicalRegister(2, "cr")
     crx = ClassicalRegister(3, "cs")
     circuit = QuantumCircuit(bits, cr, [Clbit()], crx)
     circuit.x(0).c_if(crx[1], 0)
     circuit.measure(0, bits[3])
     circuit_drawer(circuit, cregbundle=False, filename=filename1, output="latex_source")
     circuit_drawer(circuit, cregbundle=True, filename=filename2, output="latex_source")
     self.assertEqualToReference(filename1)
     self.assertEqualToReference(filename2)
예제 #14
0
    def test_conditional(self):
        """Test that circuits with conditionals draw correctly"""
        filename = self._get_resource_path("test_latex_conditional.tex")
        qr = QuantumRegister(2, "q")
        cr = ClassicalRegister(2, "c")
        circuit = QuantumCircuit(qr, cr)

        # check gates are shifted over accordingly
        circuit.h(qr)
        circuit.measure(qr, cr)
        circuit.h(qr[0]).c_if(cr, 2)

        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #15
0
    def test_cif_single_bit(self):
        """Tests conditioning gates on single classical bit"""

        filename = self._get_resource_path("test_latex_cif_single_bit.tex")
        qr = QuantumRegister(2, "qr")
        cr = ClassicalRegister(2, "cr")
        circuit = QuantumCircuit(qr, cr)
        circuit.h(qr[0]).c_if(cr[1], 0)
        circuit.x(qr[1]).c_if(cr[0], 1)
        circuit_drawer(circuit,
                       cregbundle=False,
                       filename=filename,
                       output="latex_source")

        self.assertEqualToReference(filename)
    def test_inst_with_cbits(self):
        """Test custom instructions with classical bits"""

        filename = self._get_resource_path("test_latex_inst_with_cbits.tex")
        qinst = QuantumRegister(2, "q")
        cinst = ClassicalRegister(2, "c")
        inst = QuantumCircuit(qinst, cinst, name="instruction").to_instruction()

        qr = QuantumRegister(4, "qr")
        cr = ClassicalRegister(4, "cr")
        circuit = QuantumCircuit(qr, cr)
        circuit.append(inst, [qr[1], qr[2]], [cr[2], cr[1]])
        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
    def test_barrier_label(self):
        """Test the barrier label"""
        filename = self._get_resource_path("test_latex_barrier_label.tex")
        qr = QuantumRegister(2, "q")
        circuit = QuantumCircuit(qr)
        circuit.x(0)
        circuit.y(1)
        circuit.barrier()
        circuit.y(0)
        circuit.x(1)
        circuit.barrier(label="End Y/X")

        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
def compile_file(circuit_file_name : str ,
                 apply_litinski_transform:bool=True) -> Tuple[List[GUISlice], str]:
    """Returns gui slices and the text of the circuit as processed in various stages"""

    composer_class = lattice_surgery_computation_composer.LatticeSurgeryComputation
    layout_types = lattice_surgery_computation_composer.LayoutType

    input_circuit = segmented_qasm_parser.parse_file(circuit_file_name)

    compilation_text = "Input Circuit:\n"

    compilation_text += qkvis.circuit_drawer(qkcirc.QuantumCircuit.from_qasm_file(circuit_file_name)).single_string()

    compilation_text += "\nCircuit as Pauli rotations:\n"
    compilation_text += input_circuit.render_ascii()

    if apply_litinski_transform:
        input_circuit.apply_transformation()
        input_circuit.remove_y_operators_from_circuit()
        compilation_text += "\nCircuit after the Litinski Transform:\n"
        compilation_text += input_circuit.render_ascii()

    logical_computation = logical_lattice_ops.LogicalLatticeComputation(input_circuit)
    lsc = composer_class.make_computation_with_simulation(logical_computation, layout_types.SimplePreDistilledStates)


    return list(map(sparse_lattice_to_array.sparse_lattice_to_array, lsc.composer.getSlices())), compilation_text
예제 #19
0
 def test_default_backend_auto_output_without_mpl(self):
     with patch("qiskit.user_config.get_config",
                return_value={"circuit_drawer": "auto"}):
         with optionals.HAS_MATPLOTLIB.disable_locally():
             circuit = QuantumCircuit()
             out = visualization.circuit_drawer(circuit)
             self.assertIsInstance(out, text.TextDrawing)
예제 #20
0
    def test_4597(self):
        """Test cregbundle and conditional gates.
        See: https://github.com/Qiskit/qiskit-terra/pull/4597 """
        filename = self._get_resource_path('test_4597.tex')
        qr = QuantumRegister(3, 'q')
        cr = ClassicalRegister(3, 'c')
        qc = QuantumCircuit(qr, cr)
        qc.x(qr[2]).c_if(cr, 2)
        qc.draw(output='latex_source', cregbundle=True)

        try:
            circuit_drawer(qc, filename=filename, output='latex_source')
            self.assertNotEqual(os.path.exists(filename), False)
        finally:
            if os.path.exists(filename):
                os.remove(filename)
예제 #21
0
    def test_ghz_to_gate(self):
        """Test controlled GHZ to_gate circuit"""
        filename = self._get_resource_path("test_latex_ghz_to_gate.tex")
        qr = QuantumRegister(5, "q")
        circuit = QuantumCircuit(qr)
        ghz_circuit = QuantumCircuit(3, name="Ctrl-GHZ Circuit")
        ghz_circuit.h(0)
        ghz_circuit.cx(0, 1)
        ghz_circuit.cx(1, 2)
        ghz = ghz_circuit.to_gate()
        ccghz = ghz.control(2, ctrl_state="10")
        circuit.append(ccghz, [4, 0, 1, 3, 2])

        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #22
0
    def test_u_gates(self):
        """Test U 1, 2, & 3 gates"""
        filename = self._get_resource_path('test_latex_u_gates.tex')
        from qiskit.circuit.library import U1Gate, U2Gate, U3Gate, CU1Gate, CU3Gate
        qr = QuantumRegister(4, 'q')
        circuit = QuantumCircuit(qr)
        circuit.append(U1Gate(3 * pi / 2), [0])
        circuit.append(U2Gate(3 * pi / 2, 2 * pi / 3), [1])
        circuit.append(U3Gate(3 * pi / 2, 4.5, pi / 4), [2])
        circuit.append(CU1Gate(pi / 4), [0, 1])
        circuit.append(U2Gate(pi / 2, 3 * pi / 2).control(1), [2, 3])
        circuit.append(CU3Gate(3 * pi / 2, -3 * pi / 4, -pi / 2), [0, 1])

        circuit_drawer(circuit, filename=filename, output='latex_source')

        self.assertEqualToReference(filename)
예제 #23
0
    def test_plot_partial_barrier(self):
        """Test plotting of partial barriers."""

        filename = self._get_resource_path('test_latex_plot_partial_barriers.tex')
        # generate a circuit with barrier and other barrier like instructions in
        q = QuantumRegister(2, 'q')
        c = ClassicalRegister(2, 'c')
        circuit = QuantumCircuit(q, c)

        # check for barriers
        circuit.h(q[0])
        circuit.barrier(0)
        circuit.h(q[0])

        circuit_drawer(circuit, filename=filename, output='latex_source')

        self.assertEqualToReference(filename)
 def test_measures_with_conditions(self):
     """Test that a measure containing a condition displays"""
     filename1 = self._get_resource_path("test_latex_meas_cond_false.tex")
     filename2 = self._get_resource_path("test_latex_meas_cond_true.tex")
     qr = QuantumRegister(2, "qr")
     cr1 = ClassicalRegister(2, "cr1")
     cr2 = ClassicalRegister(2, "cr2")
     circuit = QuantumCircuit(qr, cr1, cr2)
     circuit.h(0)
     circuit.h(1)
     circuit.measure(0, cr1[1])
     circuit.measure(1, cr2[0]).c_if(cr1, 1)
     circuit.h(0).c_if(cr2, 3)
     circuit_drawer(circuit, cregbundle=False, filename=filename1, output="latex_source")
     circuit_drawer(circuit, cregbundle=True, filename=filename2, output="latex_source")
     self.assertEqualToReference(filename1)
     self.assertEqualToReference(filename2)
예제 #25
0
    def test_partial_layout(self):
        """Tests partial_layout
        See: https://github.com/Qiskit/qiskit-terra/issues/4757"""
        filename = self._get_resource_path("test_latex_partial_layout.tex")
        circuit = QuantumCircuit(3)
        circuit.h(1)
        transpiled = transpile(
            circuit,
            backend=FakeTenerife(),
            optimization_level=0,
            initial_layout=[1, 2, 0],
            seed_transpiler=0,
        )

        circuit_drawer(transpiled, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #26
0
    def test_r_gates(self):
        """Test all R gates"""
        filename = self._get_resource_path("test_latex_r_gates.tex")
        qr = QuantumRegister(4, "q")
        circuit = QuantumCircuit(qr)
        circuit.r(3 * pi / 4, 3 * pi / 8, 0)
        circuit.rx(pi / 2, 1)
        circuit.ry(-pi / 2, 2)
        circuit.rz(3 * pi / 4, 3)
        circuit.rxx(pi / 2, 0, 1)
        circuit.ryy(3 * pi / 4, 2, 3)
        circuit.rzx(-pi / 2, 0, 1)
        circuit.rzz(pi / 2, 2, 3)

        circuit_drawer(circuit, filename=filename, output="latex_source")

        self.assertEqualToReference(filename)
예제 #27
0
 def test_empty_circuit(self):
     qc = QuantumCircuit()
     res = visualization.circuit_drawer(qc, output='mpl')
     res_out_file = self._make_temp_file(res)
     expected = self._expected_empty()
     expected_image_file = self._make_temp_file(expected)
     self.assertIsNone(
         compare.compare_images(expected_image_file.name, res_out_file.name,
                                0.0001))
 def test_default_backend_auto_output_without_mpl(self):
     with patch("qiskit.user_config.get_config", return_value={"circuit_drawer": "auto"}):
         with patch.object(
             visualization.circuit_visualization, "_matplotlib", autospec=True
         ) as mpl_mock:
             mpl_mock.HAS_MATPLOTLIB = False
             circuit = QuantumCircuit()
             out = visualization.circuit_drawer(circuit)
             self.assertIsInstance(out, text.TextDrawing)
 def test_wire_order(self):
     """Test the wire_order option"""
     filename = self._get_resource_path("test_latex_wire_order.tex")
     qr = QuantumRegister(4, "q")
     cr = ClassicalRegister(4, "c")
     cr2 = ClassicalRegister(2, "ca")
     circuit = QuantumCircuit(qr, cr, cr2)
     circuit.h(0)
     circuit.h(3)
     circuit.x(1)
     circuit.x(3).c_if(cr, 12)
     circuit_drawer(
         circuit,
         cregbundle=False,
         wire_order=[2, 1, 3, 0, 6, 8, 9, 5, 4, 7],
         filename=filename,
         output="latex_source",
     )
     self.assertEqualToReference(filename)
예제 #30
0
    def test_creg_initial(self):
        """Test cregbundle and initial state options"""
        filename1 = self._get_resource_path('test_latex_creg_initial_true.tex')
        filename2 = self._get_resource_path('test_latex_creg_initial_false.tex')
        qr = QuantumRegister(2, 'q')
        cr = ClassicalRegister(2, 'c')
        circuit = QuantumCircuit(qr, cr)
        circuit.x(0)
        circuit.h(0)
        circuit.x(1)

        circuit_drawer(circuit, filename=filename1, output='latex_source',
                       cregbundle=True, initial_state=True)

        self.assertEqualToReference(filename1)
        circuit_drawer(circuit, filename=filename2, output='latex_source',
                       cregbundle=False, initial_state=False)

        self.assertEqualToReference(filename2)