def decompose(self): """Call a decomposition pass on this circuit, to decompose one level (shallow decompose). Returns: QuantumCircuit: a circuit one level decomposed """ from qiskit.transpiler.passes.decompose import Decompose from qiskit.converters.circuit_to_dag import circuit_to_dag from qiskit.converters.dag_to_circuit import dag_to_circuit pass_ = Decompose() decomposed_dag = pass_.run(circuit_to_dag(self)) return dag_to_circuit(decomposed_dag)
def default_pass_manager(basis_gates, coupling_map, initial_layout, seed_transpiler): """ The default pass manager that maps to the coupling map. Args: basis_gates (list[str]): list of basis gate names supported by the target. coupling_map (CouplingMap): coupling map to target in mapping. initial_layout (Layout or None): initial layout of virtual qubits on physical qubits seed_transpiler (int or None): random seed for stochastic passes. Returns: PassManager: A pass manager to map and optimize. """ pass_manager = PassManager() pass_manager.property_set['layout'] = initial_layout pass_manager.append(Unroller(basis_gates)) # Use the trivial layout if no layout is found pass_manager.append( TrivialLayout(coupling_map), condition=lambda property_set: not property_set['layout']) # if the circuit and layout already satisfy the coupling_constraints, use that layout # otherwise layout on the most densely connected physical qubit subset pass_manager.append(CheckMap(coupling_map)) pass_manager.append( DenseLayout(coupling_map), condition=lambda property_set: not property_set['is_swap_mapped']) # Extend the the dag/layout with ancillas using the full coupling map pass_manager.append(FullAncillaAllocation(coupling_map)) pass_manager.append(EnlargeWithAncilla()) # Circuit must only contain 1- or 2-qubit interactions for swapper to work pass_manager.append(Unroll3qOrMore()) # Swap mapper pass_manager.append( LegacySwap(coupling_map, trials=20, seed=seed_transpiler)) # Expand swaps pass_manager.append(Decompose(SwapGate)) # Change CX directions pass_manager.append(CXDirection(coupling_map)) # Unroll to the basis pass_manager.append(Unroller(['u1', 'u2', 'u3', 'id', 'cx'])) # Simplify single qubit gates and CXs simplification_passes = [ Optimize1qGates(), CXCancellation(), RemoveResetInZeroState() ] pass_manager.append( simplification_passes + [Depth(), FixedPoint('depth')], do_while=lambda property_set: not property_set['depth_fixed_point']) return pass_manager