This code worked in a previous version of ibmq_simulator and, I think, it works with qiskit_aer, but it doesn't work here and I don't understand the error message. The issue is there is no "path" from the input gates to the target basis, apparently. I don't know why - the input gates are only x with a condition.
Here's the code
import numpy as np import matplotlib.pyplot as plt import random from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute import qiskit from qiskit_ibm_provider import IBMProvider def create_registers(): alice_q = QuantumRegister(1, 'alice (q)') peter_alice_q = QuantumRegister(1, 'peter/alice (q)') peter_bob_q = QuantumRegister(1, 'peter/bob (q)') bob_c = ClassicalRegister(3, 'bob (c)') circ = QuantumCircuit(alice_q, peter_alice_q, peter_bob_q, bob_c) return circ circ = create_registers() circ.x(2).c_if(1, 1) circ.measure(2, 2) provider = IBMProvider() device = provider.get_backend('ibmq_qasm_simulator') shots = 1000 circ=qiskit.compiler.transpile(circ, basis_gates=['x', 'if_else']) job = execute(circ, backend=device, shots=shots)
and here's the error message: raise TranspilerError( qiskit.transpiler.exceptions.TranspilerError: "Unable to translate the operations in the circuit: ['x', 'if_else', 'measure'] to the backend's (or manually specified) target basis: ['cu2', 'mcp', 'ry', 'rz', 'measure', 'rzz', 'ryy', 'tdg', 'mcz', 'mcswap', 'cz', 'rxx', 'cp', 'kraus', 'cx', 't', 'z', 'h', 'rx', 'u3', 'sdg', 'mcry', 'multiplexer', 'delay', 'u1', 'roerror', 'u', 'mcsx', 'mcy', 'diagonal', 'x', 'mcrz', 'ccx', 'mcrx', 'p', 'cswap', 'initialize', 'r', 'sx', 'mcr', 'mcu1', 'y', 'mcu3', 'rzx', 'csx', 's', 'id', 'mcx', 'barrier', 'swap', 'u2', 'cy', 'cu3', 'unitary', 'snapshot', 'mcu2', 'cu1']. This likely means the target basis is not universal or there are additional equivalence rules needed in the EquivalenceLibrary being used. For more details on this error see: https://qiskit.org/documentation/stubs/qiskit.transpiler.passes.BasisTranslator.html#translation_errors"
So either the target basis is not universal - and that seems unlikely - or there are equivalence rules needed. I don't know why an equivalence rule would be needed for such a simple circuit.
Furthermore, I see that the backed that works - aer - and the one that doesn't work, seem to use different equivalence libraries. How do I control which equivalence library I'm using?