quantify_scheduler.backends.graph_compilation

Graph compilation backend of quantify-scheduler.

Module Contents

Classes

SimpleNodeConfig

Datastructure specifying the structure of a simple compiler pass config.

OperationCompilationConfig

Information required to compile an individual operation to the quantum-device layer.

DeviceCompilationConfig

Information required to compile a schedule to the quantum-device layer.

LatencyCorrection

Latency correction in seconds for a port-clock combination.

DistortionCorrection

Distortion correction information for a port-clock combination.

ModulationFrequencies

Modulation frequencies for a port-clock combination.

HardwareOptions

Datastructure containing the hardware options for each port-clock combination.

Connectivity

Connectivity between the control hardware and port-clock combinations.

CompilationConfig

Base class for a compilation config.

CompilationNode

A node representing a compiler pass.

SimpleNode

A node representing a single compilation pass.

QuantifyCompiler

A compiler for quantify Schedule s.

SerialCompiler

A compiler that executes compilation passes sequentially.

SerialCompilationConfig

A compilation config for a simple serial compiler.

exception CompilationError[source]

Bases: RuntimeError

Custom exception class for failures in compilation of quantify schedules.

Initialize self. See help(type(self)) for accurate signature.

class SimpleNodeConfig[source]

Bases: quantify_scheduler.structure.model.DataStructure

Datastructure specifying the structure of a simple compiler pass config.

See also SimpleNode.

name: str[source]

The name of the compilation pass.

compilation_func: Callable[[quantify_scheduler.schedules.schedule.Schedule, Any], quantify_scheduler.schedules.schedule.Schedule][source]

The function to perform the compilation pass as an importable string (e.g., “package_name.my_module.function_name”).

_import_compilation_func_if_str(fun: Callable[[quantify_scheduler.schedules.schedule.Schedule, Any], quantify_scheduler.schedules.schedule.Schedule]) Callable[[quantify_scheduler.schedules.schedule.Schedule, Any], quantify_scheduler.schedules.schedule.Schedule][source]
class OperationCompilationConfig[source]

Bases: quantify_scheduler.structure.model.DataStructure

Information required to compile an individual operation to the quantum-device layer.

From a point of view of Compilation this information is needed to convert an operation defined on a quantum-circuit layer to an operation defined on a quantum-device layer.

factory_func: Callable[Ellipsis, quantify_scheduler.operations.operation.Operation][source]

A callable designating a factory function used to create the representation of the operation at the quantum-device level.

factory_kwargs: Dict[str, Any][source]

A dictionary containing the keyword arguments and corresponding values to use when creating the operation by evaluating the factory function.

gate_info_factory_kwargs: Optional[List[str]][source]

A list of keyword arguments of the factory function for which the value must be retrieved from the gate_info of the operation.

_import_factory_func_if_str(fun: Union[str, Callable[Ellipsis, quantify_scheduler.operations.operation.Operation]]) Callable[Ellipsis, quantify_scheduler.operations.operation.Operation][source]
class DeviceCompilationConfig[source]

Bases: quantify_scheduler.structure.model.DataStructure

Information required to compile a schedule to the quantum-device layer.

From a point of view of Compilation this information is needed to convert a schedule defined on a quantum-circuit layer to a schedule defined on a quantum-device layer.

backend: Callable[[quantify_scheduler.schedules.schedule.Schedule, Any], quantify_scheduler.schedules.schedule.Schedule][source]

A . separated string specifying the location of the compilation backend this configuration is intended for e.g., "quantify_scheduler.backends.circuit_to_device.compile_circuit_to_device".

clocks: Dict[str, float][source]

A dictionary specifying the clock frequencies available on the device e.g., {"q0.01": 6.123e9}.

elements: Dict[str, Dict[str, OperationCompilationConfig]][source]

A dictionary specifying the elements on the device, what operations can be applied to them and how to compile these.

edges: Dict[str, Dict[str, OperationCompilationConfig]][source]

A dictionary specifying the edges, links between elements on the device to which operations can be applied, and the operations that can be applied to them and how to compile these.

_import_backend_if_str(fun: Callable[[quantify_scheduler.schedules.schedule.Schedule, Any], quantify_scheduler.schedules.schedule.Schedule]) Callable[[quantify_scheduler.schedules.schedule.Schedule, Any], quantify_scheduler.schedules.schedule.Schedule][source]
class LatencyCorrection[source]

Bases: float

Latency correction in seconds for a port-clock combination.

Positive values delay the operations on the corresponding port-clock combination, while negative values shift the operation backwards in time with respect to other operations in the schedule.

Note

If the port-clock combination of a signal is not specified in the corrections, it is set to zero in compilation. The minimum correction over all port-clock combinations is then subtracted to allow for negative latency corrections and to ensure minimal wait time (see determine_relative_latency_corrections()).

Initialize self. See help(type(self)) for accurate signature.

class DistortionCorrection[source]

Bases: quantify_scheduler.structure.model.DataStructure

Distortion correction information for a port-clock combination.

class Config[source]
arbitrary_types_allowed = True[source]
filter_func: str[source]

The function applied to the waveforms.

input_var_name: str[source]

The argument to which the waveforms will be passed in the filter_func.

kwargs: Dict[str, Union[List, numpy.typing.NDArray]][source]

The keyword arguments that are passed to the filter_func.

clipping_values: Optional[List][source]

The optional boundaries to which the corrected pulses will be clipped, upon exceeding.

class ModulationFrequencies[source]

Bases: quantify_scheduler.structure.model.DataStructure

Modulation frequencies for a port-clock combination.

interm_freq: Optional[float][source]

The intermodulation frequency (IF) used for this port-clock combination.

lo_freq: Optional[float][source]

The local oscillator frequency (LO) used for this port-clock combination.

class HardwareOptions[source]

Bases: quantify_scheduler.structure.model.DataStructure

Datastructure containing the hardware options for each port-clock combination.

latency_corrections: Optional[Dict[str, LatencyCorrection]][source]

Dictionary containing the latency corrections (values) that should be applied to operations on a certain port-clock combination (keys).

distortion_corrections: Optional[Dict[str, DistortionCorrection]][source]

Dictionary containing the distortion corrections (values) that should be applied to waveforms on a certain port-clock combination (keys).

modulation_frequencies: Optional[Dict[str, ModulationFrequencies]][source]

Dictionary containing the modulation frequencies (values) that should be used for signals on a certain port-clock combination (keys).

class Connectivity[source]

Bases: quantify_scheduler.structure.model.DataStructure

Connectivity between the control hardware and port-clock combinations.

Describes how the instruments are connected to port-clock combinations on the quantum device.

class CompilationConfig[source]

Bases: quantify_scheduler.structure.model.DataStructure

Base class for a compilation config.

Subclassing is generally required to create useful compilation configs, here extra fields can be defined.

name: str[source]

The name of the compiler.

version: str = 'v0.4'[source]

The version of the CompilationConfig to facilitate backwards compatibility.

backend: Type[QuantifyCompiler][source]

A reference string to the QuantifyCompiler class used in the compilation.

device_compilation_config: Optional[Union[DeviceCompilationConfig, Dict]][source]

The DeviceCompilationConfig used in the compilation from the quantum-circuit layer to the quantum-device layer.

hardware_options: Optional[HardwareOptions][source]

The HardwareOptions used in the compilation from the quantum-device layer to the control-hardware layer.

connectivity: Optional[Union[Connectivity, Dict]][source]

Datastructure representing how the port-clocks on the quantum device are connected to the control hardware.

_import_backend_if_str(class_: Union[Type[QuantifyCompiler], str]) Type[QuantifyCompiler][source]
_latencies_in_hardware_config(connectivity)[source]
_distortions_in_hardware_config(connectivity)[source]
class CompilationNode(name: str)[source]

A node representing a compiler pass.

Initialize a node representing a compiler pass.

Note

To compile, the compile() method should be used.

Parameters

name – The name of the node. Should be unique if it is added to a (larger) compilation graph.

abstract _compilation_func(schedule: Union[quantify_scheduler.schedules.schedule.Schedule, quantify_scheduler.structure.model.DataStructure], config: quantify_scheduler.structure.model.DataStructure) Union[quantify_scheduler.schedules.schedule.Schedule, quantify_scheduler.structure.model.DataStructure][source]

Private compilation method of this CompilationNode.

It should be completely stateless whenever inheriting from the CompilationNode, this is the object that should be modified.

compile(schedule: Union[quantify_scheduler.schedules.schedule.Schedule, quantify_scheduler.structure.model.DataStructure], config: quantify_scheduler.structure.model.DataStructure) Union[quantify_scheduler.schedules.schedule.Schedule, quantify_scheduler.structure.model.DataStructure][source]

Execute a compilation pass.

This method takes a Schedule and returns a new (updated) Schedule using the information provided in the config.

class SimpleNode(name: str, compilation_func: Callable)[source]

Bases: CompilationNode

A node representing a single compilation pass.

Initialize a node representing a single compilation pass.

Note

To compile, the compile() method should be used.

Parameters
  • name – The name of the node. Should be unique if it is added to a (larger) compilation graph.

  • compilation_func – A Callable that will be wrapped in this object. A compilation function should take the intermediate representation (commonly Schedule) and a config as inputs and returns a new (modified) intermediate representation.

_compilation_func(schedule: quantify_scheduler.schedules.schedule.Schedule, config: Union[quantify_scheduler.structure.model.DataStructure, dict]) quantify_scheduler.schedules.schedule.Schedule[source]

Private compilation method of this CompilationNode.

It should be completely stateless whenever inheriting from the CompilationNode, this is the object that should be modified.

class QuantifyCompiler(name, quantum_device: Optional[quantify_scheduler.device_under_test.quantum_device.QuantumDevice] = None)[source]

Bases: CompilationNode

A compiler for quantify Schedule s.

The compiler defines a directed acyclic graph containing CompilationNode s. In this graph, nodes represent modular compilation passes.

Initialize a QuantifyCompiler for quantify Schedule s.

Parameters
  • name – name of the compiler instance

  • quantum_device – quantum_device from which a CompilationConfig will be generated if None is provided for the compile step

property input_node[source]

Node designated as the default input for compilation.

If not specified will return None.

property output_node[source]

Node designated as the default output for compilation.

If not specified will return None.

compile(schedule: quantify_scheduler.schedules.schedule.Schedule, config: Optional[CompilationConfig] = None) quantify_scheduler.schedules.schedule.CompiledSchedule[source]

Compile a Schedule using the information provided in the config.

Parameters
  • schedule – the schedule to compile.

  • config – describing the information required to compile the schedule. If not specified, self.quantum_device will be used to generate the config.

Returns

a compiled schedule containing the compiled instructions suitable for execution on a (hardware) backend.

Return type

CompiledSchedule

abstract construct_graph(config: CompilationConfig)[source]

Construct the compilation graph based on a provided config.

draw(ax: matplotlib.axes.Axes = None, figsize: Tuple[float, float] = (20, 10), **options) matplotlib.axes.Axes[source]

Draws the graph defined by this backend using matplotlib.

Will attempt to position the nodes using the “dot” algorithm for directed acyclic graphs from graphviz if available. See https://pygraphviz.github.io/documentation/stable/install.html for installation instructions of pygraphviz and graphviz.

If not available will use the Kamada Kawai positioning algorithm.

Parameters
  • ax – Matplotlib axis to plot the figure on

  • figsize – Optional figure size, defaults to something slightly larger that fits the size of the nodes.

  • options – optional keyword arguments that are passed to networkx.draw_networkx.

class SerialCompiler(name, quantum_device: Optional[quantify_scheduler.device_under_test.quantum_device.QuantumDevice] = None)[source]

Bases: QuantifyCompiler

A compiler that executes compilation passes sequentially.

Initialize a QuantifyCompiler for quantify Schedule s.

Parameters
  • name – name of the compiler instance

  • quantum_device – quantum_device from which a CompilationConfig will be generated if None is provided for the compile step

construct_graph(config: SerialCompilationConfig)[source]

Construct the compilation graph based on a provided config.

For a serial backend, it is just a list of compilation passes.

_compilation_func(schedule: quantify_scheduler.schedules.schedule.Schedule, config: SerialCompilationConfig) quantify_scheduler.schedules.schedule.CompiledSchedule[source]

Compile a schedule using the backend and the information provided in the config.

Parameters
  • schedule – The schedule to compile.

  • config – A dictionary containing the information needed to compile the schedule. Nodes in this compiler specify what key they need information from in this dictionary.

class SerialCompilationConfig[source]

Bases: CompilationConfig

A compilation config for a simple serial compiler.

Specifies compilation as a list of compilation passes.

backend: Type[SerialCompiler][source]
compilation_passes: List[SimpleNodeConfig][source]
_import_backend_if_str(class_: Union[Type[SerialCompiler], str]) Type[SerialCompiler][source]