コード例 #1
0
 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
コード例 #2
0
 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
コード例 #3
0
    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)