quantify_scheduler.backends.graph_compilation
Module Contents
Classes
Datastructure specifying the structure of a simple compiler pass config |
|
Base class for a CompilationConfig. |
|
A compilation config for a simple serial compiler. |
|
A node representing a compiler pass. |
|
A node representing a simple compiler pass consisting of calling a single |
|
A compiler for quantify |
|
A compiler that dynamically generates a graph of serial compilation |
- exception CompilationError[source]
Bases:
RuntimeErrorCustom 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.DataStructureDatastructure specifying the structure of a simple compiler pass config (also see
SimpleNode).- Parameters:
name – the name of the compilation pass
compilation_func – the function to perform the compilation pass as an importable string (e.g., “package_name.my_module.function_name”).
compilation_options – the options passed to the compilation function along with the intermediate representation.
- class CompilationConfig[source]
Bases:
quantify_scheduler.structure.model.DataStructureBase class for a CompilationConfig. Subclassing is generally required to create useful configs, here extra fields can be defined.
- class SerialCompilationConfig[source]
Bases:
CompilationConfigA compilation config for a simple serial compiler. Specifies compilation as a list of compilation passes.
- compilation_passes: List[SimpleNodeConfig][source]
- class CompilationNode(name: str)[source]
A node representing a compiler pass.
A node representing a compiler pass.
- Parameters:
name – The name of the node. Should be unique if it is added to a (larger) compilation graph.
note (..) – Note that to compile, the
compile()method should be used.
- abstract _compilation_func(schedule: Union[quantify_scheduler.Schedule, quantify_scheduler.structure.model.DataStructure], config: quantify_scheduler.structure.model.DataStructure) Union[quantify_scheduler.Schedule, quantify_scheduler.structure.model.DataStructure][source]
This is the private compilation method. It should be completely stateless whenever inheriting from the CompilationNode, this is the object that should be modified.
- compile(schedule: Union[quantify_scheduler.Schedule, quantify_scheduler.structure.model.DataStructure], config: quantify_scheduler.structure.model.DataStructure) Union[quantify_scheduler.Schedule, quantify_scheduler.structure.model.DataStructure][source]
Execute a compilation pass, taking a
Scheduleand using the information provided in the config to return a new (updated)Schedule.
- class SimpleNode(name: str, compilation_func: Callable)[source]
Bases:
CompilationNodeA node representing a simple compiler pass consisting of calling a single compilation function.
A node representing a simple compiler pass consisting of calling a single compilation function.
- 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.note:: (..) – Note that to compile, the
compile()method should be used.
- _compilation_func(schedule: quantify_scheduler.Schedule, config: Union[quantify_scheduler.structure.model.DataStructure, dict]) quantify_scheduler.Schedule[source]
This is the private compilation method. 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:
CompilationNodeA compiler for quantify
Schedules. The compiler defines a directed acyclic graph containingCompilationNodes. In this graph, nodes represent modular compilation passes.- Parameters:
name – name of the compiler instance
quantum_device – quantum_device from which a
CompilationConfigwill 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.Schedule, config: Optional[CompilationConfig] = None) quantify_scheduler.CompiledSchedule[source]
Compile a
Scheduleusing 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:
- 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:
QuantifyCompilerA compiler that dynamically generates a graph of serial compilation passes upon calling the compile method.
- Parameters:
name – name of the compiler instance
quantum_device – quantum_device from which a
CompilationConfigwill 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.Schedule, config: SerialCompilationConfig) quantify_scheduler.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.