-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Description
Background
This issue is for tracking the work required for removing pulse and all its dependencies within Qiskit. For convenience, qiskit/utils/deprecate_pulse.py
defines a few decorators for deprecating pulse code, namely deprecate_pulse_func
, deprecate_pulse_dependency
and deprecate_pulse_arg
. All pulse deprecations were marked with these decorators (mostly in #13164), so it should be rather easy to locate the code that need to be removed by searching for deprecate_pulse
within the codebase.
Details
Most of the changes here are just code removal, but certain cases require special handling for supporting the fact that we don't have pulse anymore. For example, we would want QPY to still be able to load a payload with pulse data in it (likely leading to a partially-specified circuit), possibly notifying the user that pulse data cannot be represented in Qiskit thus it will be ignored. So I think it makes sense to expect that we'll end up having a few PRs for handling all the removal with the vast majority done in one PR with few additional ones to implement specific changes. Furthermore, I think it would help to work against a dedicated branch so we can make progress in parallel without breaking anything in Qiskit main
.
Here are the major things that we need to address. If we work against a single branch, we can mark the progress against that branch:
- Pulse itself -
qiskit/pulse
- Pulse visualization -
visualization/pulse_v2
- Transpiler and circuit related
- Passes:
PulseGates
,RXCalibrationBuilder
,RZXCalibrationBuilder
,EchoRZXWeylDecomposition
,ValidatePulseGates
- Deprecated args e.g. in
generate_preset_pass_manager()
,PassManagerConfig
,generate_scheduling()
,transpile
- Target - calibration and instruction schedule map support
-
DAGCircuit
andDagDependency
- calibrations support (also in Rust) -
QuantumCircuit
- calibrations support
- Passes:
- qpy
- Drop support for
ScheduleBlock
indump()
- Gracefully ignore schedule blocks when loading payloads containing pulse data
- Drop support for
- qobj - remove
QobjToInstructionConverter
- assembler/scheduler/compiler
- Remove
sequence()
,schedule()
,schdule_circuit()
,assemble_schedules()
,ScheduleConfig()
and scheduling related methods
- Remove
- Providers
-
GenericBackendV2
- make pulse-agnostic (no pulse_channel and custom calibrations in init) - All pulse-supporting fake backends
- Remove *_channel methods everywhere
- PulseDefaults
-
- Testing
- Module unit tests (
tests/python/pulse
) - Visualization tests (
test/python/visualization/pulse_v2
) - Transpiler related
- Module unit tests (
-
deprecate_pulse.py
inqiskit/utils
Note that we'll need to remove more code than what is directly deprecated by the deprecate_pulse_*
decorators since these were used to ensure deprecation warning coverage but without necessarily marking every piece of code that need to be removed (for example deprecating only the root of a class hierarchy or just the entry point of deprecated logic).