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, tuple) for elem in initial_layout): initial_layout = Layout.from_tuplelist(initial_layout) elif isinstance(initial_layout, dict): initial_layout = Layout(initial_layout) return initial_layout
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_enlarge_with_ancilla(self): """This pass tests that idle qubits after an embedding are left idle.""" # Create a four qubit problem. op = PauliSumOp.from_list([("IZZI", 1), ("ZIIZ", 2), ("ZIZI", 3)]) circ = QuantumCircuit(4) circ.append(PauliEvolutionGate(op, 1), range(4)) # Create a four qubit quantum circuit. backend_cmap = CouplingMap(couplinglist=[(0, 1), (1, 2), (1, 3), (3, 4)]) swap_cmap = CouplingMap(couplinglist=[(0, 1), (1, 2), (2, 3)]) swap_strat = SwapStrategy(swap_cmap, swap_layers=(((0, 1), (2, 3)), ((1, 2), ))) initial_layout = Layout.from_intlist([0, 1, 3, 4], *circ.qregs) pm_pre = PassManager([ FindCommutingPauliEvolutions(), Commuting2qGateRouter(swap_strat), SetLayout(initial_layout), FullAncillaAllocation(backend_cmap), EnlargeWithAncilla(), ApplyLayout(), ]) embedded = pm_pre.run(circ) expected = QuantumCircuit(5) expected.append(PauliEvolutionGate(Pauli("ZZ"), 1), (1, 3)) expected.swap(0, 1) expected.swap(3, 4) expected.append(PauliEvolutionGate(Pauli("ZZ"), 2), (1, 3)) expected.swap(1, 3) expected.append(PauliEvolutionGate(Pauli("ZZ"), 3), (0, 1)) self.assertEqual(embedded, expected)