Qiskit / qiskit

Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.

Home Page:https://www.ibm.com/quantum/qiskit

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bug in `visualization.pulse_v2.device_info` required for plotting pulse schedules.

vishal-ph opened this issue · comments

Environment

  • Qiskit version: 1.0.2
  • Python version: 3.11.8
  • Operating system: MacOS Sonoma 14.1

What is happening?

While trying to plot the pulse schedule diagram from a quantum circuit whilst passing the backend object as argument, the plotter fails because the script qiskit.visualization.pulse_v2.device_info.py extracts the backend name as, backend.name() which is not callable anymore.

How can we reproduce the issue?

Code to reproduce the error:

from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, qasm3, transpile, schedule
from qiskit_ibm_provider import IBMProvider
provider = IBMProvider()
backend = provider.get_backend("ibm_brisbane")

# Quantum Circuit
ckt = QuantumCircuit(3,3)
ckt.h([0])
ckt.cx(0,1)
ckt.cx(0,2)
ckt.measure([0,1,2],[0,1,2])

# transpile the circuit
t_ckt = transpile(ckt, backend=backend)

# obtain pulse schedule and plot
ckt_sched = schedule(t_ckt, backend=backend)
ckt_sched.draw(time_range=(0,1000),time_unit='ns',backend=backend)

This generates the following error message:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 ckt_sched.draw(time_range=(0,1000),time_unit='ns',backend=backend)

File ~/anaconda3/envs/new_exp/lib/python3.11/site-packages/qiskit/pulse/schedule.py:1628, in _common_method.<locals>.decorator.<locals>.wrapper(*args, **kwargs)
   1626 @functools.wraps(method)
   1627 def wrapper(*args, **kwargs):
-> 1628     return method(*args, **kwargs)

File ~/anaconda3/envs/new_exp/lib/python3.11/site-packages/qiskit/pulse/schedule.py:1693, in draw(self, style, backend, time_range, time_unit, disable_channels, show_snapshot, show_framechange, show_waveform_info, show_barrier, plotter, axis)
   1690 # pylint: disable=cyclic-import
   1691 from qiskit.visualization import pulse_drawer
-> 1693 return pulse_drawer(
   1694     program=self,
   1695     style=style,
   1696     backend=backend,
   1697     time_range=time_range,
   1698     time_unit=time_unit,
   1699     disable_channels=disable_channels,
   1700     show_snapshot=show_snapshot,
   1701     show_framechange=show_framechange,
   1702     show_waveform_info=show_waveform_info,
   1703     show_barrier=show_barrier,
   1704     plotter=plotter,
   1705     axis=axis,
   1706 )

File ~/anaconda3/envs/new_exp/lib/python3.11/site-packages/qiskit/visualization/pulse_v2/interface.py:386, in draw(program, style, backend, time_range, time_unit, disable_channels, show_snapshot, show_framechange, show_waveform_info, show_barrier, plotter, axis)
    383 temp_style.update(style or stylesheet.IQXStandard())
    385 if backend:
--> 386     device = device_info.OpenPulseBackendInfo.create_from_backend(backend)
    387 else:
    388     device = device_info.OpenPulseBackendInfo()

File ~/anaconda3/envs/new_exp/lib/python3.11/site-packages/qiskit/visualization/pulse_v2/device_info.py:113, in OpenPulseBackendInfo.create_from_backend(cls, backend)
    110 defaults = backend.defaults()
    112 # load name
--> 113 name = backend.name()
    115 # load cycle time
    116 dt = configuration.dt

TypeError: 'str' object is not callable

What should happen?

The code should output and draw the pulse schedule with ns time units.

Any suggestions?

I believe the backend name should be extracted as backend.name here

Confirming that this bug exists as described by @vishal-ph . The same issue appears to have been corrected elsewhere in Qiskit (e.g. in qiskit/providers/providerutils.py) to adapt between V1 and V2 backend classes.