def run(self, quantum_circuit): dag_circuit = circuit_to_dag(quantum_circuit) init_time = time.time() self.parameters["TIME_START"] = init_time initial_mapping = [] if self.parameters["initial_map"] == K7MInitialMapping.RANDOM: # Only the first positions which correspond to the circuit qubits initial_mapping = numpy.random.permutation( self.parameters["nisq_qubits"]) initial_mapping = initial_mapping[:dag_circuit.num_qubits()] elif self.parameters["initial_map"] == K7MInitialMapping.LINEAR: initial_mapping = list(range(dag_circuit.num_qubits())) elif self.parameters["initial_map"] == K7MInitialMapping.HEURISTIC: initial_mapping = cuthill_order(dag_circuit, self.coupling_obj, self.parameters) init_time = time.time() - init_time if initial_mapping is None: return None, init_time, None # print(initial_mapping) # # return quantum_circuit print(" .......") original_pm = PassManager() optimal_layout = Layout() for c_idx, p_idx in enumerate(initial_mapping): optimal_layout.add(quantum_circuit.qregs[0][c_idx], p_idx) original_pm.append([ SetLayout(optimal_layout), ApplyLayout(), StochasticSwap(self.coupling_obj.coupling, seed=0), Decompose(gate=qiskit.extensions.SwapGate) ]) return original_pm.run(quantum_circuit), init_time, initial_mapping
def run(self, quantum_circuit): dag_circuit = circuit_to_dag(quantum_circuit) init_time = time.time() initial_mapping = [] if self.parameters["initial_map"] == K7MInitialMapping.RANDOM: # Only the first positions which correspond to the circuit qubits initial_mapping = numpy.random.permutation( self.parameters["nisq_qubits"]) initial_mapping = initial_mapping[:dag_circuit.num_qubits()] elif self.parameters["initial_map"] == K7MInitialMapping.LINEAR: initial_mapping = list(range(dag_circuit.num_qubits())) elif self.parameters["initial_map"] == K7MInitialMapping.HEURISTIC: initial_mapping = cuthill_order(dag_circuit, self.coupling_obj, self.parameters) init_time = time.time() - init_time # print(initial_mapping) # # return quantum_circuit print(" .......") original_pm = PassManager() optimal_layout = Layout() for c_idx, p_idx in enumerate(initial_mapping): optimal_layout.add(quantum_circuit.qregs[0][c_idx], p_idx) original_pm.append([ SetLayout(optimal_layout), ApplyLayout(), StochasticSwap(self.coupling_obj.coupling), Decompose(gate=qiskit.extensions.SwapGate) ]) return original_pm.run(quantum_circuit), init_time, initial_mapping """ NAIVE ROUTING """ # if self.positions_obj == None: # self.positions_obj = K7MPositions(dag_circuit, # self.parameters, # initial_mapping) # ''' # Start with an initial configuration # ''' # compiled_dag, back_stack = self.find_solution(dag_circuit, self.parameters["dry_run"]) # # """ # Returning here stops backtracking -> A full backtrack is not available, # but the following code, after having iterated through the possible # configurations (code before here): # * counts the most common configuration # * computes for each configuration the cost # * chooses the configuration of minimum cost # """ # # # Clean the positions # self.positions_obj = None # # return dag_to_circuit(compiled_dag) """