Qiskit / qiskit-ibm-runtime

IBM Client for Qiskit Runtime
https://docs.quantum.ibm.com/api/qiskit-ibm-runtime
Apache License 2.0
138 stars 149 forks source link

Transpiled circuits for ibmq_qasm_simulator cause the deprecation warning of ISA circuit #1448

Open t-imamichi opened 4 months ago

t-imamichi commented 4 months ago

Describe the bug Even though I transpile a circuit for ibmq_qasm_simulator, it still raises the deprecation warning of ISA circuit. Parametrized gates do not seem to be unrolled to basis gates.

On the other hand, it works fine with real devices.

Steps to reproduce

from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

from qiskit_ibm_runtime import Estimator, QiskitRuntimeService

a = Parameter("a")
circuit = QuantumCircuit(1)
circuit.ry(a, 0)
print("original circuit")
print(circuit)

service = QiskitRuntimeService()
for backend_name in ["ibmq_qasm_simulator", "ibm_perth"]:
    backend = service.get_backend(backend_name)
    passmanager = generate_preset_pass_manager(optimization_level=1, backend=backend)
    isa_circuit = passmanager.run(circuit)
    print("isa circuit for", backend)
    print(isa_circuit)
    observavle = SparsePauliOp("Z").apply_layout(isa_circuit.layout)
    print(observavle)
    estimator = Estimator(backend, options={"shots": 100})
    result = estimator.run([isa_circuit], [observavle], [1]).result()
    print(result)
    print()

output

original circuit
   ┌───────┐
q: ┤ Ry(a) ├
   └───────┘
isa circuit for <IBMBackend('ibmq_qasm_simulator')>
   ┌───────┐
q: ┤ Ry(a) ├
   └───────┘
SparsePauliOp(['Z'],
              coeffs=[1.+0.j])
/Users/ima/tasks/4_2024/qiskit/runtime/tmp/isa.py:24: DeprecationWarning: The instruction ry on qubits (0,) is not supported by the target system. Circuits that do not match the target hardware definition will no longer be supported after March 1, 2024. See the transpilation documentation (https://docs.quantum.ibm.com/transpile) for instructions to transform circuits and the primitive examples (https://docs.quantum.ibm.com/run/primitives-examples) to see this coupled with operator transformations.
  result = estimator.run([isa_circuit], [observavle], [1]).result()
EstimatorResult(values=array([0.66]), metadata=[{'variance': 0.5644, 'shots': 100}])

isa circuit for <IBMBackend('ibm_perth')>
global phase: 3π/2
               ┌────┐┌───────────┐┌────┐┌────────┐
      q_0 -> 0 ┤ √X ├┤ Rz(a + π) ├┤ √X ├┤ Rz(3π) ├
               └────┘└───────────┘└────┘└────────┘
ancilla_0 -> 1 ───────────────────────────────────

ancilla_1 -> 2 ───────────────────────────────────

ancilla_2 -> 3 ───────────────────────────────────

ancilla_3 -> 4 ───────────────────────────────────

ancilla_4 -> 5 ───────────────────────────────────

ancilla_5 -> 6 ───────────────────────────────────

SparsePauliOp(['IIIIIIZ'],
              coeffs=[1.+0.j])
EstimatorResult(values=array([0.7697116]), metadata=[{'variance': 0.6942073760072728, 'shots': 112, 'readout_mitigation_num_twirled_circuits': 16, 'readout_mitigation_shots_calibration': 8192, 'warning': 'Optimization level clipped from 3 to 1'}])

I noticed that isa circuit for ibmq_qasm_simulator is not unrolled to the basis gate compared with that for ibm_perth.

Expected behavior

No ISA warning for ibmq_qasm_simulator

Suggested solutions

ibmq_qasm_simulator might miss basis gate information perhaps?

Additional Information

jyu00 commented 4 months ago

ibmq_qasm_simulator might miss basis gate information perhaps?

Yeah from the best I can tell, the configuration file for ibmq_qasm_simulator is outdated. Hence a warning is issued by the client but not by the server (which doesn't use the configuration file). For now I added code in #1437 to bypass the check if the backend is a simulator.