Beispiel #1
0
    def test_from_circuit_constructor_reverse_embedded_layout_ignore_set_layout(self):
        """Test initialization from a circuit with an ignored embedded reverse layout."""
        # Test tensor product of 1-qubit gates
        circuit = QuantumCircuit(3)
        circuit.h(2)
        circuit.x(1)
        circuit.ry(np.pi / 2, 0)
        circuit._layout = Layout({circuit.qubits[2]: 0, circuit.qubits[1]: 1, circuit.qubits[0]: 2})
        op = Operator.from_circuit(circuit, ignore_set_layout=True).reverse_qargs()
        y90 = (1 / np.sqrt(2)) * np.array([[1, -1], [1, 1]])
        target = np.kron(y90, np.kron(self.UX, self.UH))
        global_phase_equivalent = matrix_equal(op.data, target, ignore_phase=True)
        self.assertTrue(global_phase_equivalent)

        # Test decomposition of Controlled-Phase gate
        lam = np.pi / 4
        circuit = QuantumCircuit(2)
        circuit.cp(lam, 1, 0)
        circuit._layout = Layout({circuit.qubits[1]: 0, circuit.qubits[0]: 1})
        op = Operator.from_circuit(circuit, ignore_set_layout=True).reverse_qargs()
        target = np.diag([1, 1, 1, np.exp(1j * lam)])
        global_phase_equivalent = matrix_equal(op.data, target, ignore_phase=True)
        self.assertTrue(global_phase_equivalent)

        # Test decomposition of controlled-H gate
        circuit = QuantumCircuit(2)
        circuit.ch(1, 0)
        circuit._layout = Layout({circuit.qubits[1]: 0, circuit.qubits[0]: 1})
        op = Operator.from_circuit(circuit, ignore_set_layout=True).reverse_qargs()
        target = np.kron(self.UI, np.diag([1, 0])) + np.kron(self.UH, np.diag([0, 1]))
        global_phase_equivalent = matrix_equal(op.data, target, ignore_phase=True)
        self.assertTrue(global_phase_equivalent)
Beispiel #2
0
def layout_test():
    q0 = QuantumRegister(1, name='x')
    q1 = QuantumRegister(1, name='y')
    q2 = QuantumRegister(1, name='z')
    q3 = QuantumRegister(1, name='h')
    cr = ClassicalRegister(4)
    qc = QuantumCircuit(q0, q1, q2, q3, cr)
    qc.x(q0[0])
    qc.y(q1[0])
    qc.z(q2[0])
    qc.h(q3[0])
    qc.measure(q0, cr[0])
    # qc = random_circuit(4, 1, measure=True)
    print(qc)
    q = qc.qubits
    print(q)
    input_dict = {}
    input_dict[q0[0]] = 3
    input_dict[q1[0]] = 2
    input_dict[q2[0]] = 1
    input_dict[q3[0]] = 0
    # input_dict[q[0]] = 3
    # input_dict[q[1]] = 2
    # input_dict[q[2]] = 1
    # input_dict[q[3]] = 0
    layout = Layout(input_dict=input_dict)
    print(layout)
    qc._layout = layout
    print(qc)
    print(qc._layout)
Beispiel #3
0
 def test_from_circuit_constructor_ghz_out_of_order_layout(self):
     """Test an out of order ghz state with a layout set."""
     circuit = QuantumCircuit(5)
     circuit.h(3)
     circuit.cx(3, 4)
     circuit.cx(3, 2)
     circuit.cx(3, 0)
     circuit.cx(3, 1)
     circuit._layout = Layout(
         {
             circuit.qubits[3]: 0,
             circuit.qubits[4]: 1,
             circuit.qubits[2]: 2,
             circuit.qubits[0]: 3,
             circuit.qubits[1]: 4,
         }
     )
     result = Operator.from_circuit(circuit)
     expected = QuantumCircuit(5)
     expected.h(0)
     expected.cx(0, 1)
     expected.cx(0, 2)
     expected.cx(0, 3)
     expected.cx(0, 4)
     expected_op = Operator(expected)
     self.assertTrue(expected_op.equiv(result))
Beispiel #4
0
 def test_plot_circuit_layout(self, backend):
     """ tests plot_circuit_layout for each device"""
     layout_length = int(backend._configuration.n_qubits / 2)
     qr = QuantumRegister(layout_length, 'qr')
     circuit = QuantumCircuit(qr)
     circuit._layout = Layout({qr[i]: i * 2 for i in range(layout_length)})
     n = backend.configuration().n_qubits
     img_ref = path_to_diagram_reference(str(n) + "_plot_circuit_layout.png")
     filename = str(n) + "_plot_circuit_layout_result.png"
     fig = plot_circuit_layout(circuit, backend)
     fig.savefig(filename)
     self.assertImagesAreEqual(filename, img_ref, 0.1)
     os.remove(filename)
 def test_plot_circuit_layout(self, backend):
     """tests plot_circuit_layout for each device"""
     layout_length = int(backend._configuration.n_qubits / 2)
     qr = QuantumRegister(layout_length, "qr")
     circuit = QuantumCircuit(qr)
     circuit._layout = Layout({qr[i]: i * 2 for i in range(layout_length)})
     circuit._layout.add_register(qr)
     n = backend.configuration().n_qubits
     img_ref = path_to_diagram_reference(str(n) + "_plot_circuit_layout.png")
     fig = plot_circuit_layout(circuit, backend)
     with BytesIO() as img_buffer:
         fig.savefig(img_buffer, format="png")
         img_buffer.seek(0)
         self.assertImagesAreEqual(Image.open(img_buffer), img_ref, 0.1)
     plt.close(fig)
Beispiel #6
0
 def test_from_circuit_empty_circuit_empty_layout(self):
     """Test an out of order ghz state with a layout set."""
     circuit = QuantumCircuit()
     circuit._layout = Layout()
     op = Operator.from_circuit(circuit)
     self.assertEqual(Operator([1]), op)