Exemple #1
0
    def from_layout_dict(layout_dict):
        physical_list = []
        keys = layout_dict.keys()
        values = layout_dict.values()

        if all(isinstanceint(elem) for elem in keys):
            return list(keys)
        elif all(isinstanceint(elem) for elem in values):
            return list(values)
        else:
            raise EvaluateDelayError(
                "The initial_layout keys or values should be int type")
Exemple #2
0
 def order_based_on_type(value1, value2):
     """decides which one is physical/virtual based on the type. Returns (virtual, physical)"""
     if isinstanceint(value1) and isinstance(value2, (Qubit, type(None))):
         physical = int(value1)
         virtual = value2
     elif isinstanceint(value2) and isinstance(value1, (Qubit, type(None))):
         physical = int(value2)
         virtual = value1
     else:
         raise LayoutError('The map (%s -> %s) has to be a (Bit -> integer)'
                           ' or the other way around.' % (type(value1), type(value2)))
     return virtual, physical
Exemple #3
0
    def from_intlist(int_list, *qregs):
        """Converts a list of integers to a Layout
        mapping virtual qubits (index of the list) to
        physical qubits (the list values).

        Args:
            int_list (list): A list of integers.
            *qregs (QuantumRegisters): The quantum registers to apply
                the layout to.
        Returns:
            Layout: The corresponding Layout object.
        Raises:
            LayoutError: Invalid input layout.
        """
        if not all(isinstanceint(i) for i in int_list):
            raise LayoutError('Expected a list of ints')
        if len(int_list) != len(set(int_list)):
            raise LayoutError(
                'Duplicate values not permitted; Layout is bijective.')
        n_qubits = sum(reg.size for reg in qregs)
        # Check if list is too short to cover all qubits
        if len(int_list) < n_qubits:
            err_msg = 'Integer list length must equal number of qubits in circuit.'
            raise LayoutError(err_msg)
        out = Layout()
        main_idx = 0
        for qreg in qregs:
            for idx in range(qreg.size):
                out[qreg[idx]] = int_list[main_idx]
                main_idx += 1
        if main_idx != len(int_list):
            for int_item in int_list[main_idx:]:
                out[int_item] = None
        return out
Exemple #4
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
Exemple #5
0
 def parse_initial_layout(self):
     new_il_list = []
     for il in self.initial_layout:
         if isinstancelist(il):
             if all(isinstanceint(elem) for elem in il):
                 new_il_list.append(il)
             elif all(isinstance(elem, Qubit) for elem in il):
                 new_il_list.append(from_qubit_list(il))
         elif isinstance(il, dict):
             new_il_list(from_layout_dict(il))
         else:
             raise EvaluateDelayError(
                 "The initial_layout parameter could not be parsed")
     return new_il_list