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
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
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
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
def test_add_edge(self): coupling = CouplingMap() self.assertEqual("", str(coupling)) coupling.add_edge(0, 1) expected = "[[0, 1]]" self.assertEqual(expected, str(coupling))