Skip to main contentIBM Quantum Documentation
This page is from the dev version of Qiskit SDK. Go to the stable version

Schedule

class qiskit.pulse.Schedule(*schedules, name=None, metadata=None)

GitHub

Bases: object

A quantum program schedule with exact time constraints for its instructions, operating over all input signal channels and supporting special syntaxes for building.

Pulse program representation for the original Qiskit Pulse model [1]. Instructions are not allowed to overlap in time on the same channel. This overlap constraint is immediately evaluated when a new instruction is added to the Schedule object.

It is necessary to specify the absolute start time and duration for each instruction so as to deterministically fix its execution time.

The Schedule program supports some syntax sugar for easier programming.

  • Appending an instruction to the end of a channel

    from qiskit.pulse import Schedule, Gaussian, DriveChannel, Play
    sched = Schedule()
    sched += Play(Gaussian(160, 0.1, 40), DriveChannel(0))
  • Appending an instruction shifted in time by a given amount

    sched = Schedule()
    sched += Play(Gaussian(160, 0.1, 40), DriveChannel(0)) << 30
  • Merge two schedules

    sched1 = Schedule()
    sched1 += Play(Gaussian(160, 0.1, 40), DriveChannel(0))
     
    sched2 = Schedule()
    sched2 += Play(Gaussian(160, 0.1, 40), DriveChannel(1))
    sched2 = sched1 | sched2

A PulseError is immediately raised when the overlap constraint is violated.

In the schedule representation, we cannot parametrize the duration of instructions. Thus, we need to create a new schedule object for each duration. To parametrize an instruction’s duration, the ScheduleBlock representation may be used instead.

References

[1]: https://arxiv.org/abs/2004.06755

Create an empty schedule.

Deprecated since version 1.3

The class qiskit.pulse.schedule.Schedule is deprecated as of Qiskit 1.3. It will be removed in Qiskit 2.0. The entire Qiskit Pulse package is being deprecated and will be moved to the Qiskit Dynamics repository: https://github.com/qiskit-community/qiskit-dynamics

Parameters

  • *schedules ('ScheduleComponent' | tuple[int, 'ScheduleComponent']) – Child Schedules of this parent Schedule. May either be passed as the list of schedules, or a list of (start_time, schedule) pairs.
  • name (str | None) – Name of this schedule. Defaults to an autogenerated string if not provided.
  • metadata (dict | None) – Arbitrary key value metadata to associate with the schedule. This gets stored as free-form data in a dict in the metadata attribute. It will not be directly used in the schedule.

Raises

TypeError – if metadata is not a dict.


Attributes

channels

Returns channels that this schedule uses.

children

Return the child schedule components of this Schedule in the order they were added to the schedule.

Notes

Nested schedules are returned as-is. If you want to collect only instructions, use instructions() instead.

Returns

A tuple, where each element is a two-tuple containing the initial scheduled time of each NamedValue and the component itself.

duration

Duration of this schedule.

instances_counter

Default value: count(0)

instructions

Get the time-ordered instructions from self.

metadata

The user provided metadata associated with the schedule.

User provided dict of metadata for the schedule. The metadata contents do not affect the semantics of the program but are used to influence the execution of the schedule. It is expected to be passed between all transforms of the schedule and that providers will associate any schedule metadata with the results it returns from the execution of that schedule.

name

Name of this Schedule

parameters

Parameters which determine the schedule behavior.

prefix

Default value: 'sched'

start_time

Starting time of this schedule.

stop_time

Stopping time of this schedule.

timeslots

Time keeping attribute.


Methods

append

append(schedule, name=None, inplace=False)

GitHub

Return a new schedule with schedule inserted at the maximum time over all channels shared between self and schedule.

t=max(x.stop_timexself.channelsschedule.channels)t = \textrm{max}(\texttt{x.stop\_time} |\texttt{x} \in \texttt{self.channels} \cap \texttt{schedule.channels})

Parameters

  • schedule (ScheduleComponent) – Schedule to be appended.
  • name (str | None) – Name of the new Schedule. Defaults to name of self.
  • inplace (bool) – Perform operation inplace on this schedule. Otherwise return a new Schedule.

Return type

Schedule

assign_parameters

assign_parameters(value_dict, inplace=True)

GitHub

Assign the parameters in this schedule according to the input.

Parameters

  • value_dict (dict[ParameterExpression |ParameterVector |str, ParameterValueType | Sequence[ParameterValueType]]) – A mapping from parameters or parameter names (parameter vector
  • values (or parameter vector name) to either numeric) –
  • expression (or another parameter) –
  • inplace (bool) – Set True to override this instance with new parameter.

Returns

Schedule with updated parameters.

Return type

Schedule

ch_duration

ch_duration(*channels)

GitHub

Return the time of the end of the last instruction over the supplied channels.

Parameters

*channels (Channel) – Channels within self to include.

Return type

int

ch_start_time

ch_start_time(*channels)

GitHub

Return the time of the start of the first instruction over the supplied channels.

Parameters

*channels (Channel) – Channels within self to include.

Return type

int

ch_stop_time

ch_stop_time(*channels)

GitHub

Return maximum start time over supplied channels.

Parameters

*channels (Channel) – Channels within self to include.

Return type

int

draw

draw(style=None, backend=None, time_range=None, time_unit='dt', disable_channels=None, show_snapshot=True, show_framechange=True, show_waveform_info=True, plot_barrier=True, plotter='mpl2d', axis=None, show_barrier=True)

GitHub

Plot the schedule.

Parameters

  • style (dict[str, Any] | None) – Stylesheet options. This can be dictionary or preset stylesheet classes. See IQXStandard, IQXSimple, and IQXDebugging for details of preset stylesheets.

  • backend (Optional[BaseBackend]) – Backend object to play the input pulse program. If provided, the plotter may use to make the visualization hardware aware.

  • time_range (tuple[int, int] | None) – Set horizontal axis limit. Tuple (tmin, tmax).

  • time_unit (str) – The unit of specified time range either dt or ns. The unit of ns is available only when backend object is provided.

  • disable_channels (list[Channel] | None) – A control property to show specific pulse channel. Pulse channel instances provided as a list are not shown in the output image.

  • show_snapshot (bool) – Show snapshot instructions.

  • show_framechange (bool) – Show frame change instructions. The frame change represents instructions that modulate phase or frequency of pulse channels.

  • show_waveform_info (bool) – Show additional information about waveforms such as their name.

  • plot_barrier (bool) – Show barrier lines.

  • plotter (str) –

    Name of plotter API to generate an output image. One of following APIs should be specified:

    mpl2d: Matplotlib API for 2D image generation.
        Matplotlib API to generate 2D image. Charts are placed along y axis with
        vertical offset. This API takes matplotlib.axes.Axes as ``axis`` input.

    axis and style kwargs may depend on the plotter.

  • axis (Any | None) – Arbitrary object passed to the plotter. If this object is provided, the plotters use a given axis instead of internally initializing a figure object. This object format depends on the plotter. See plotter argument for details.

  • show_barrier (bool) – DEPRECATED. Show barrier lines.

Returns

Visualization output data. The returned data type depends on the plotter. If matplotlib family is specified, this will be a matplotlib.pyplot.Figure data.

exclude

exclude(*filter_funcs, channels=None, instruction_types=None, time_ranges=None, intervals=None, check_subroutine=True)

GitHub

Return a Schedule with only the instructions from this Schedule failing at least one of the provided filters. This method is the complement of filter(), so that:

self.filter(args) | self.exclude(args) == self

Parameters

  • filter_funcs (Callable) – A list of Callables which take a (int, Union[‘Schedule’, Instruction]) tuple and return a bool.
  • channels (Iterable[Channel] | None) – For example, [DriveChannel(0), AcquireChannel(0)].
  • instruction_types (Iterable[abc.ABCMeta] | abc.ABCMeta) – For example, [PulseInstruction, AcquireInstruction].
  • time_ranges (Iterable[tuple[int, int]] | None) – For example, [(0, 5), (6, 10)].
  • intervals (Iterable[Interval] | None) – For example, [(0, 5), (6, 10)].
  • check_subroutine (bool) – Set True to individually filter instructions inside of a subroutine defined by the Call instruction.

Return type

Schedule

filter

filter(*filter_funcs, channels=None, instruction_types=None, time_ranges=None, intervals=None, check_subroutine=True)

GitHub

Return a new Schedule with only the instructions from this Schedule which pass though the provided filters; i.e. an instruction will be retained iff every function in filter_funcs returns True, the instruction occurs on a channel type contained in channels, the instruction type is contained in instruction_types, and the period over which the instruction operates is fully contained in one specified in time_ranges or intervals.

If no arguments are provided, self is returned.

Parameters

  • filter_funcs (Callable) – A list of Callables which take a (int, Union[‘Schedule’, Instruction]) tuple and return a bool.
  • channels (Iterable[Channel] | None) – For example, [DriveChannel(0), AcquireChannel(0)].
  • instruction_types (Iterable[abc.ABCMeta] | abc.ABCMeta) – For example, [PulseInstruction, AcquireInstruction].
  • time_ranges (Iterable[tuple[int, int]] | None) – For example, [(0, 5), (6, 10)].
  • intervals (Iterable[Interval] | None) – For example, [(0, 5), (6, 10)].
  • check_subroutine (bool) – Set True to individually filter instructions inside of a subroutine defined by the Call instruction.

Return type

Schedule

get_parameters

get_parameters(parameter_name)

GitHub

Get parameter object bound to this schedule by string name.

Because different Parameter objects can have the same name, this method returns a list of Parameter s for the provided name.

Parameters

parameter_name (str) – Name of parameter.

Returns

Parameter objects that have corresponding name.

Return type

list[qiskit.circuit.parameter.Parameter]

initialize_from

classmethod initialize_from(other_program, name=None)

GitHub

Create new schedule object with metadata of another schedule object.

Parameters

  • other_program (Any) – Qiskit program that provides metadata to new object.
  • name (str | None) – Name of new schedule. Name of schedule is used by default.

Returns

New schedule object with name and metadata.

Raises

PulseError – When other_program does not provide necessary information.

Return type

Schedule

insert

insert(start_time, schedule, name=None, inplace=False)

GitHub

Return a new schedule with schedule inserted into self at start_time.

Parameters

  • start_time (int) – Time to insert the schedule.
  • schedule (ScheduleComponent) – Schedule to insert.
  • name (str | None) – Name of the new schedule. Defaults to the name of self.
  • inplace (bool) – Perform operation inplace on this schedule. Otherwise return a new Schedule.

Return type

Schedule

is_parameterized

is_parameterized()

GitHub

Return True iff the instruction is parameterized.

Return type

bool

replace

replace(old, new, inplace=False)

GitHub

Return a Schedule with the old instruction replaced with a new instruction.

The replacement matching is based on an instruction equality check.

from qiskit import pulse
 
d0 = pulse.DriveChannel(0)
 
sched = pulse.Schedule()
 
old = pulse.Play(pulse.Constant(100, 1.0), d0)
new = pulse.Play(pulse.Constant(100, 0.1), d0)
 
sched += old
 
sched = sched.replace(old, new)
 
assert sched == pulse.Schedule(new)

Only matches at the top-level of the schedule tree. If you wish to perform this replacement over all instructions in the schedule tree. Flatten the schedule prior to running:

.. code-block::

sched = pulse.Schedule()

sched += pulse.Schedule(old)

sched = sched.replace(old, new)

assert sched == pulse.Schedule(new)

Parameters

Returns

The modified schedule with old replaced by new.

Raises

PulseError – If the Schedule after replacements will has a timing overlap.

Return type

Schedule

shift

shift(time, name=None, inplace=False)

GitHub

Return a schedule shifted forward by time.

Parameters

  • time (int) – Time to shift by.
  • name (str | None) – Name of the new schedule. Defaults to the name of self.
  • inplace (bool) – Perform operation inplace on this schedule. Otherwise return a new Schedule.

Return type

Schedule

Was this page helpful?
Report a bug or request content on GitHub.