Exemplo n.º 1
0
def _parse_coupling_map(coupling_map, backend, num_circuits):
    # try getting coupling_map from user, else backend
    if coupling_map is None:
        if getattr(backend, 'configuration', None):
            configuration = backend.configuration()
            if hasattr(configuration, 'coupling_map') and configuration.coupling_map:
                faulty_map = _create_faulty_qubits_map(backend)
                if faulty_map:
                    coupling_map = CouplingMap()
                    for qubit1, qubit2 in configuration.coupling_map:
                        if faulty_map[qubit1] is not None and faulty_map[qubit2] is not None:
                            coupling_map.add_edge(faulty_map[qubit1], faulty_map[qubit2])
                else:
                    coupling_map = CouplingMap(configuration.coupling_map)

    # coupling_map could be None, or a list of lists, e.g. [[0, 1], [2, 1]]
    if coupling_map is None or isinstance(coupling_map, CouplingMap):
        coupling_map = [coupling_map] * num_circuits
    elif isinstance(coupling_map, list) and all(isinstance(i, list) and len(i) == 2
                                                for i in coupling_map):
        coupling_map = [coupling_map] * num_circuits

    coupling_map = [CouplingMap(cm) if isinstance(cm, list) else cm for cm in coupling_map]

    return coupling_map
Exemplo n.º 2
0
def load_coupling_graph(coupling_graph_file_path, num_qubits):
    coupling_graph = CouplingMap()
    for i in range(num_qubits):
        coupling_graph.add_physical_qubit(i)

    with open(coupling_graph_file_path, newline='') as coupling_graph_file:
        csv_reader = csv.reader(coupling_graph_file)
        for source_qubit, destination_qubit in csv_reader:
            coupling_graph.add_edge(int(source_qubit), int(destination_qubit))
    return coupling_graph
Exemplo n.º 3
0
def _parse_coupling_map(coupling_map, backend, num_circuits):
    # try getting coupling_map from user, else backend
    if coupling_map is None:
        backend_version = getattr(backend, "version", 0)
        if not isinstance(backend_version, int):
            backend_version = 0
        if backend_version <= 1:
            if getattr(backend, "configuration", None):
                configuration = backend.configuration()
                if hasattr(configuration,
                           "coupling_map") and configuration.coupling_map:
                    faulty_map = _create_faulty_qubits_map(backend)
                    if faulty_map:
                        faulty_edges = [
                            gate.qubits
                            for gate in backend.properties().faulty_gates()
                        ]
                        functional_gates = [
                            edge for edge in configuration.coupling_map
                            if edge not in faulty_edges
                        ]
                        coupling_map = CouplingMap()
                        for qubit1, qubit2 in functional_gates:
                            if faulty_map[qubit1] is not None and faulty_map[
                                    qubit2] is not None:
                                coupling_map.add_edge(faulty_map[qubit1],
                                                      faulty_map[qubit2])
                        if configuration.n_qubits != coupling_map.size():
                            warnings.warn(
                                "The backend has currently some qubits/edges out of service."
                                " This temporarily reduces the backend size from "
                                f"{configuration.n_qubits} to {coupling_map.size()}",
                                UserWarning,
                            )
                    else:
                        coupling_map = CouplingMap(configuration.coupling_map)
        else:
            coupling_map = backend.coupling_map

    # coupling_map could be None, or a list of lists, e.g. [[0, 1], [2, 1]]
    if coupling_map is None or isinstance(coupling_map, CouplingMap):
        coupling_map = [coupling_map] * num_circuits
    elif isinstance(coupling_map, list) and all(
            isinstance(i, list) and len(i) == 2 for i in coupling_map):
        coupling_map = [coupling_map] * num_circuits

    coupling_map = [
        CouplingMap(cm) if isinstance(cm, list) else cm for cm in coupling_map
    ]

    return coupling_map
def generate_coupling_map(environment):
    coupling_map = CouplingMap()

    a = environment.adjacency_matrix

    for i in range(len(a)):
        for j in range(len(a[0])):
            if a[i][j] == 1:
                coupling_map.add_edge(i, j)
                coupling_map.add_edge(j, i)

    if not coupling_map.is_symmetric:
        exit("Qiskit coupling map was not symmetric")

    return coupling_map
Exemplo n.º 5
0
def _coupling_map(coupling_map, backend):
    # try getting coupling_map from user, else backend
    if coupling_map is None:
        if getattr(backend, 'configuration', None):
            configuration = backend.configuration()
            if hasattr(configuration, 'coupling_map') and configuration.coupling_map:
                faulty_map = _create_faulty_qubits_map(backend)
                if faulty_map:
                    coupling_map = CouplingMap()
                    for qubit1, qubit2 in configuration.coupling_map:
                        if faulty_map[qubit1] is not None and faulty_map[qubit2] is not None:
                            coupling_map.add_edge(faulty_map[qubit1], faulty_map[qubit2])
                else:
                    coupling_map = CouplingMap(configuration.coupling_map)
    # coupling_map = [CouplingMap(cm) if isinstance(cm, list) else cm for cm in coupling_map]
    return coupling_map
def generate_coupling_map(environment):
    """
    Generates the coupling map from the device adjacency matrix

    :param environment: environment.environment.Environment, our environment object
    :return: list of edges on the device topology (i, j)
    """
    coupling_map = CouplingMap()

    a = environment.adjacency_matrix

    for i in range(len(a)):
        for j in range(len(a[0])):
            if a[i][j] == 1:
                coupling_map.add_edge(i, j)
                coupling_map.add_edge(j, i)

    if not coupling_map.is_symmetric:
        exit("Qiskit coupling map was not symmetric")

    return coupling_map
Exemplo n.º 7
0
 def test_add_edge(self):
     coupling = CouplingMap()
     self.assertEqual("", str(coupling))
     coupling.add_edge(0, 1)
     expected = "[[0, 1]]"
     self.assertEqual(expected, str(coupling))