コード例 #1
0
    def test_layout_from_intlist(self):
        """Create a layout from a list of integers.
        virtual  physical
         q1_0  ->  4
         q2_0  ->  5
         q2_1  ->  6
         q3_0  ->  8
         q3_1  ->  9
         q3_2  ->  10
        """
        qr1 = QuantumRegister(1, 'qr1')
        qr2 = QuantumRegister(2, 'qr2')
        qr3 = QuantumRegister(3, 'qr3')
        intlist_layout = [4, 5, 6, 8, 9, 10]
        layout = Layout.generate_from_intlist(intlist_layout, qr1, qr2, qr3)

        expected = Layout({
            4: (QuantumRegister(1, 'qr1'), 0),
            5: (QuantumRegister(2, 'qr2'), 0),
            6: (QuantumRegister(2, 'qr2'), 1),
            8: (QuantumRegister(3, 'qr3'), 0),
            9: (QuantumRegister(3, 'qr3'), 1),
            10: (QuantumRegister(3, 'qr3'), 2)
        })
        self.assertDictEqual(layout._p2v, expected._p2v)
        self.assertDictEqual(layout._v2p, expected._v2p)
コード例 #2
0
    def test_layout_from_intlist_short(self):
        """If the intlist is longer that your quantum register, map them to None.
        virtual  physical
         q1_0  ->  4
         q2_0  ->  5
         q2_1  ->  6
         None  ->  8
         None  ->  9
         None  ->  10
        """
        qr1 = QuantumRegister(1, 'qr1')
        qr2 = QuantumRegister(2, 'qr2')

        intlist_layout = [4, 5, 6, 8, 9, 10]
        layout = Layout.generate_from_intlist(intlist_layout, qr1, qr2)

        expected = Layout({
            4: (QuantumRegister(1, 'qr1'), 0),
            5: (QuantumRegister(2, 'qr2'), 0),
            6: (QuantumRegister(2, 'qr2'), 1),
            8: None,
            9: None,
            10: None
        })
        self.assertDictEqual(layout._p2v, expected._p2v)
        self.assertDictEqual(layout._v2p, expected._v2p)
コード例 #3
0
def transpile(circuits, backend=None, basis_gates=None, coupling_map=None,
              initial_layout=None, seed_mapper=None, pass_manager=None):
    """transpile one or more circuits.

    Args:
        circuits (QuantumCircuit or list[QuantumCircuit]): circuits to compile
        backend (BaseBackend): a backend to compile for
        basis_gates (list[str]): list of basis gate names supported by the
            target. Default: ['u1','u2','u3','cx','id']
        coupling_map (list): coupling map (perhaps custom) to target in mapping
        initial_layout (list): initial layout of qubits in mapping
        seed_mapper (int): random seed for the swap_mapper
        pass_manager (PassManager): a pass_manager for the transpiler stages

    Returns:
        QuantumCircuit or list[QuantumCircuit]: transpiled circuit(s).

    Raises:
        TranspilerError: if args are not complete for the transpiler to function
    """
    return_form_is_single = False
    if isinstance(circuits, QuantumCircuit):
        circuits = [circuits]
        return_form_is_single = True

    # Check for valid parameters for the experiments.
    basis_gates = basis_gates or backend.configuration().basis_gates
    if coupling_map:
        coupling_map = coupling_map
    elif backend:
        # This needs to be removed once Aer 0.2 is out
        coupling_map = getattr(backend.configuration(), 'coupling_map', None)
    else:
        coupling_map = None

    if not basis_gates:
        raise TranspilerError('no basis_gates or backend to compile to')

    # Convert integer list format to Layout
    if isinstance(initial_layout, list) and \
            all(isinstance(elem, int) for elem in initial_layout):
        if isinstance(circuits, list):
            circ = circuits[0]
        else:
            circ = circuits
        initial_layout = Layout.generate_from_intlist(initial_layout, *circ.qregs)

    if initial_layout is not None and not isinstance(initial_layout, Layout):
        initial_layout = Layout(initial_layout)

    circuits = parallel_map(_transpilation, circuits,
                            task_kwargs={'basis_gates': basis_gates,
                                         'coupling_map': coupling_map,
                                         'initial_layout': initial_layout,
                                         'seed_mapper': seed_mapper,
                                         'pass_manager': pass_manager})
    if return_form_is_single:
        return circuits[0]
    return circuits
コード例 #4
0
    def test_layout_from_intlist_duplicated(self):
        """If the intlist contains duplicated ints, fail.
        virtual  physical
         q1_0  ->  4
         q2_0  ->  6 -- This is
         q2_1  ->  6 -- not allowed
        """
        qr1 = QuantumRegister(1, 'qr1')
        qr2 = QuantumRegister(2, 'qr2')
        intlist_layout = [4, 6, 6]

        with self.assertRaises(LayoutError):
            _ = Layout.generate_from_intlist(intlist_layout, qr1, qr2)
コード例 #5
0
    def test_layout_from_intlist_long(self):
        """If the intlist is shorter that your quantum register, fail.
        virtual  physical
         q1_0  ->  4
         q2_0  ->  5
         q2_1  ->  6
         q3_0  ->  8
         q3_1  ->  ?
         q3_2  ->  ?
        """
        qr1 = QuantumRegister(1, 'qr1')
        qr2 = QuantumRegister(2, 'qr2')
        qr3 = QuantumRegister(3, 'qr3')
        intlist_layout = [4, 5, 6, 8]

        with self.assertRaises(LayoutError):
            _ = Layout.generate_from_intlist(intlist_layout, qr1, qr2, qr3)