qml.transforms.CommutationDAG¶
- class CommutationDAG(tape)[source]¶
Bases:
object
Class to represent a quantum circuit as a directed acyclic graph (DAG). This class is useful to build the commutation DAG and set up all nodes attributes. The construction of the DAG should be used through the transform
qml.transforms.commutation_dag
.- Parameters:
tape (.QuantumTape) – PennyLane quantum tape representing a quantum circuit.
Reference:
[1] Iten, R., Moyard, R., Metger, T., Sutter, D. and Woerner, S., 2020. Exact and practical pattern matching for quantum circuit optimization. doi.org/10.1145/3498325
Attributes
Return the DAG object.
Return the size of the DAG object.
- graph¶
Return the DAG object.
- Returns:
Networkx representation of the DAG.
- Return type:
networkx.MultiDiGraph()
- size¶
Return the size of the DAG object.
- Returns:
Number of nodes in the DAG.
- Return type:
int
Methods
add_edge
(node_in, node_out)Add an edge (non commutation) between node_in and node_out.
add_node
(operation)Add the operation as a node in the DAG and updates the edges.
direct_predecessors
(node_id)Return the direct predecessors of the given node.
direct_successors
(node_id)Return the direct successors of the given node.
draw
([filename])Draw the DAG object.
get_edge
(node_in, node_out)Get the edge between two nodes if it exists.
Get all edges as an iterable.
get_node
(node_id)Add the operation as a node in the DAG and updates the edges.
Return iterable to loop through all the nodes in the DAG.
predecessors
(node_id)Return the predecessors of the given node.
successors
(node_id)Return the successors of the given node.
- add_edge(node_in, node_out)[source]¶
Add an edge (non commutation) between node_in and node_out.
- Parameters:
node_in (int) – Id of the ingoing node.
node_out (int) – Id of the outgoing node.
- Returns:
Id of the created edge.
- Return type:
int
- add_node(operation)[source]¶
Add the operation as a node in the DAG and updates the edges.
- Parameters:
operation (qml.operation) – PennyLane quantum operation to add to the DAG.
- direct_predecessors(node_id)[source]¶
Return the direct predecessors of the given node.
- Parameters:
node_id (int) – Id of the node in the DAG.
- Returns:
List of the direct predecessors of the given node.
- Return type:
list[int]
- direct_successors(node_id)[source]¶
Return the direct successors of the given node.
- Parameters:
node_id (int) – Id of the node in the DAG.
- Returns:
List of the direct successors of the given node.
- Return type:
list[int]
- draw(filename='dag.png')[source]¶
Draw the DAG object.
- Parameters:
filename (str) – The file name which is in PNG format. Default = ‘dag.png’
- get_edge(node_in, node_out)[source]¶
Get the edge between two nodes if it exists.
- Parameters:
node_in (int) – Id of the ingoing node.
node_out (int) – Id of the outgoing node.
- Returns:
Default weight is 0, it returns None when there is no edge.
- Return type:
dict or None
- get_edges()[source]¶
Get all edges as an iterable.
- Returns:
Iterable over all edges.
- Return type:
networkx.classes.reportviews.OutMultiEdgeDataView
- get_node(node_id)[source]¶
Add the operation as a node in the DAG and updates the edges.
- Parameters:
node_id (int) – PennyLane quantum operation to add to the DAG.
- Returns:
The node with the given id.
- Return type:
CommutationDAGNOde
- get_nodes()[source]¶
Return iterable to loop through all the nodes in the DAG.
- Returns:
Iterable nodes.
- Return type:
networkx.classes.reportviews.NodeDataView