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)
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)
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))
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)
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)