def _layout_from_raw(initial_layout, circuit): if isinstance(initial_layout, list): if all(isinstance(elem, int) for elem in initial_layout): initial_layout = Layout.from_intlist(initial_layout, *circuit.qregs) elif all(elem is None or isinstance(elem, Qubit) for elem in initial_layout): initial_layout = Layout.from_qubit_list(initial_layout) elif isinstance(initial_layout, dict): initial_layout = Layout(initial_layout) return initial_layout
def test_default_pass_manager_two(self): """Test default_pass_manager.run(circuitS). circuit1 and circuit2: qr0:-[H]--.------------ -> 1 | qr1:-----(+)--.-------- -> 2 | qr2:---------(+)--.---- -> 3 | qr3:-------------(+)--- -> 5 device: 0 - 1 - 2 - 3 - 4 - 5 - 6 | | | | | | 13 - 12 - 11 - 10 - 9 - 8 - 7 """ qr = QuantumRegister(4, "qr") circuit1 = QuantumCircuit(qr) circuit1.h(qr[0]) circuit1.cx(qr[0], qr[1]) circuit1.cx(qr[1], qr[2]) circuit1.cx(qr[2], qr[3]) circuit2 = QuantumCircuit(qr) circuit2.cx(qr[1], qr[2]) circuit2.cx(qr[0], qr[1]) circuit2.cx(qr[2], qr[3]) coupling_map = FakeMelbourne().configuration().coupling_map basis_gates = FakeMelbourne().configuration().basis_gates initial_layout = [None, qr[0], qr[1], qr[2], None, qr[3]] pass_manager = level_1_pass_manager( PassManagerConfig( basis_gates=basis_gates, coupling_map=CouplingMap(coupling_map), initial_layout=Layout.from_qubit_list(initial_layout), seed_transpiler=42, )) new_circuits = pass_manager.run([circuit1, circuit2]) for new_circuit in new_circuits: bit_indices = { bit: idx for idx, bit in enumerate(new_circuit.qregs[0]) } for gate, qargs, _ in new_circuit.data: if isinstance(gate, CXGate): self.assertIn([bit_indices[x] for x in qargs], coupling_map)
def _layout_from_raw(initial_layout, circuit): if initial_layout is None or isinstance(initial_layout, Layout): return initial_layout elif isinstancelist(initial_layout): if all(isinstanceint(elem) for elem in initial_layout): initial_layout = Layout.from_intlist(initial_layout, *circuit.qregs) elif all(elem is None or isinstance(elem, Qubit) for elem in initial_layout): initial_layout = Layout.from_qubit_list(initial_layout) elif isinstance(initial_layout, dict): initial_layout = Layout(initial_layout) else: raise TranspilerError("The initial_layout parameter could not be parsed") return initial_layout
def test_initial_layout_fully_connected_cm(self, level): """Honor initial_layout when coupling_map=None See: https://github.com/Qiskit/qiskit-terra/issues/5345 """ qr = QuantumRegister(2, "q") qc = QuantumCircuit(qr) qc.h(qr[0]) qc.cx(qr[0], qr[1]) transpiled = transpile( qc, initial_layout=[0, 1], optimization_level=level, callback=self.callback ) self.assertIn("SetLayout", self.passes) self.assertIn("ApplyLayout", self.passes) self.assertEqual(transpiled._layout, Layout.from_qubit_list([qr[0], qr[1]]))
def test_default_pass_manager_single(self): """Test default_pass_manager.run(circuit). circuit: qr0:-[H]--.------------ -> 1 | qr1:-----(+)--.-------- -> 2 | qr2:---------(+)--.---- -> 3 | qr3:-------------(+)--- -> 5 device: 0 - 1 - 2 - 3 - 4 - 5 - 6 | | | | | | 13 - 12 - 11 - 10 - 9 - 8 - 7 """ qr = QuantumRegister(4, 'qr') circuit = QuantumCircuit(qr) circuit.h(qr[0]) circuit.cx(qr[0], qr[1]) circuit.cx(qr[1], qr[2]) circuit.cx(qr[2], qr[3]) coupling_map = FakeMelbourne().configuration().coupling_map basis_gates = FakeMelbourne().configuration().basis_gates initial_layout = [None, qr[0], qr[1], qr[2], None, qr[3]] pass_manager = level_1_pass_manager( TranspileConfig( basis_gates=basis_gates, coupling_map=CouplingMap(coupling_map), initial_layout=Layout.from_qubit_list(initial_layout), seed_transpiler=42, optimization_level=1)) new_circuit = pass_manager.run(circuit) for gate, qargs, _ in new_circuit.data: if isinstance(gate, CnotGate): self.assertIn([x.index for x in qargs], coupling_map)
def test_partial_layout_fully_connected_cm(self, level): """Honor initial_layout (partially defined) when coupling_map=None See: https://github.com/Qiskit/qiskit-terra/issues/5345 """ qr = QuantumRegister(2, 'q') qc = QuantumCircuit(qr) qc.h(qr[0]) qc.cx(qr[0], qr[1]) transpiled = transpile(qc, initial_layout=[4, 2], optimization_level=level, callback=self.callback) self.assertIn('SetLayout', self.passes) self.assertIn('ApplyLayout', self.passes) ancilla = QuantumRegister(3, 'ancilla') self.assertEqual( transpiled._layout, Layout.from_qubit_list( [ancilla[0], ancilla[1], qr[1], ancilla[2], qr[0]]))