def compile(circuits, backend, config=None, basis_gates=None, coupling_map=None, initial_layout=None, shots=1024, max_credits=10, seed=None, qobj_id=None, hpc=None, skip_transpiler=False): """Compile a list of circuits into a qobj. Args: circuits (QuantumCircuit or list[QuantumCircuit]): circuits to compile backend (BaseBackend or str): a backend to compile for config (dict): dictionary of parameters (e.g. noise) used by runner basis_gates (str): comma-separated basis gate set to compile to coupling_map (list): coupling map (perhaps custom) to target in mapping initial_layout (list): initial layout of qubits in mapping shots (int): number of repetitions of each circuit, for sampling max_credits (int): maximum credits to use seed (int): random seed for simulators qobj_id (int): identifier for the generated qobj hpc (dict): HPC simulator parameters skip_transpiler (bool): If True, bypass most of the compilation process and creates a qobj with minimal check nor translation Returns: obj: the qobj to be run on the backends """ # pylint: disable=redefined-builtin if isinstance(backend, str): backend = _DEFAULT_PROVIDER.get_backend(backend) pass_manager = None # default pass manager which executes predetermined passes if skip_transpiler: # empty pass manager which does nothing pass_manager = transpiler.PassManager() return transpiler.compile(circuits, backend, config, basis_gates, coupling_map, initial_layout, shots, max_credits, seed, qobj_id, hpc, pass_manager)
backend_device = IBMQ.get_backend('ibmqx4') # 0. build circuit from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit q = QuantumRegister(2) c = ClassicalRegister(2) circ = QuantumCircuit(q, c) circ.cx(q[0], q[1]) circ.cx(q[0], q[1]) circ.cx(q[0], q[1]) circ.cx(q[0], q[1]) circ.measure(q, c) # draw circuit print("orginal circuit") print(circ.draw()) # 1. standard compile -- standard qiskit passes, when no PassManager given from qiskit import transpiler circuit1 = transpiler.transpile(circ, backend_device) print("circuit after standard pass manager") print(circuit1.draw()) # 2. custom compile -- customize PassManager to run specific circuit transformations from qiskit.transpiler.passes import CXCancellation pm = transpiler.PassManager() pm.append(CXCancellation()) circuit2 = transpiler.transpile(circ, backend_device, pass_manager=pm) print("circuit after custom pass manager") print(circuit2.draw())