Skip to content

backend.num_qubits is incorrect (or broken) for simulation backends #1484

Open
@richrines1

Description

@richrines1

Describe the bug

  • for "ibmq_qasm_simulator" and "simulator_statevector", backend.num_qubits returns 32 but submitting a circuit with more than 31 qubits results in a "Circuits do not match the target definition" error
  • for "simulator_mps", backend.num_qubits returns 100 but submitting a circuit with more than 63 qubits results in the same error
  • for "simulator_stabilizer" and "simulator_extended_stabilizer", backend.num_qubits itself throws an error

Steps to reproduce

service = qiskit_ibm_runtime.QiskitRuntimeService()

def test_backend(backend_name, num_qubits):
    backend = service.backend(backend_name)
    print(f"{backend_name} (backend has {backend.num_qubits} qubits):")

    circuit = qiskit.QuantumCircuit(num_qubits, 1)
    circuit.measure(0, 0)

    job = qiskit_ibm_runtime.Sampler(backend).run(circuit, shots=1)
    job.wait_for_final_state()

    print(f"{circuit.num_qubits}-qubit circuit: {job.status()}\n")

test_backend("ibmq_qasm_simulator", 31)
test_backend("ibmq_qasm_simulator", 32)

test_backend("simulator_statevector", 31)
test_backend("simulator_statevector", 32)

test_backend("simulator_mps", 63)
test_backend("simulator_mps", 64)

prints:

ibmq_qasm_simulator (backend has 32 qubits):
31-qubit circuit: JobStatus.DONE

ibmq_qasm_simulator (backend has 32 qubits):
32-qubit circuit: JobStatus.ERROR

simulator_statevector (backend has 32 qubits):
31-qubit circuit: JobStatus.DONE

simulator_statevector (backend has 32 qubits):
32-qubit circuit: JobStatus.ERROR

simulator_mps (backend has 100 qubits):
63-qubit circuit: JobStatus.DONE

simulator_mps (backend has 100 qubits):
64-qubit circuit: JobStatus.ERROR

(where for each failing job, job.error_message() returns "...Circuits do not match the target definition (non-ISA circuits)...")

meanwhile the following two lines fail immediately with a TranspilerError:

service.backend("simulator_stabilizer").num_qubits  # TranspilerError: "The number of qubits for Instruction(name='cx', num_qubits=2, num_clbits=0, params=[]) does not match the number of qubits in the properties dictionary: (0,)"
service.backend("simulator_extended_stabilizer").num_qubits  # TranspilerError: "The number of qubits for Instruction(name='cx', num_qubits=2, num_clbits=0, params=[]) does not match the number of qubits in the properties dictionary: (0,)"

Expected behavior

i would expect to be able to submit a circuit with (op to) backend.num_qubits qubits

Additional Information

  • qiskit-ibm-runtime version: 0.21.0
  • Python version: 3.11.8
  • Operating system: Ubuntu 22.04.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingserver actionNeed actions from the server side

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions