DAGDependency
class DAGDependency
Bases: object
Object to represent a quantum circuit as a directed acyclic graph via operation dependencies (i.e. lack of commutation).
The nodes in the graph are operations represented by quantum gates. The edges correspond to non-commutation between two operations (i.e. a dependency). A directed edge from node A to node B means that operation A does not commute with operation B. The object’s methods allow circuits to be constructed.
The nodes in the graph have the following attributes: ‘operation’, ‘successors’, ‘predecessors’.
Example:
Bell circuit with no measurement.
┌───┐
qr_0: ┤ H ├──■──
└───┘┌─┴─┐
qr_1: ─────┤ X ├
└───┘
The dependency DAG for the above circuit is represented by two nodes. The first one corresponds to Hadamard gate, the second one to the CNOT gate as the gates do not commute there is an edge between the two nodes.
Reference:
[1] Iten, R., Moyard, R., Metger, T., Sutter, D. and Woerner, S., 2020. Exact and practical pattern matching for quantum circuit optimization. arXiv:1909.05270
Create an empty DAGDependency.
Methods
add_clbits
DAGDependency.add_clbits(clbits)
Add individual clbit wires.
add_creg
DAGDependency.add_creg(creg)
Add clbits in a classical register.
add_op_node
DAGDependency.add_op_node(operation, qargs, cargs)
Add a DAGDepNode to the graph and update the edges.
Parameters
- operation (qiskit.circuit.Instruction) – operation as a quantum gate.
- qargs (list[Qubit]) – list of qubits on which the operation acts
- cargs (list[Clbit]) – list of classical wires to attach to.
add_qreg
DAGDependency.add_qreg(qreg)
Add qubits in a quantum register.
add_qubits
DAGDependency.add_qubits(qubits)
Add individual qubit wires.
copy
DAGDependency.copy()
Function to copy a DAGDependency object. :returns: a copy of a DAGDependency object. :rtype: DAGDependency
depth
DAGDependency.depth()
Return the circuit depth. :returns: the circuit depth :rtype: int
direct_predecessors
DAGDependency.direct_predecessors(node_id)
Direct predecessors id of a given node as sorted list.
Parameters
node_id (int) – label of considered node.
Returns
direct predecessors id as a sorted list
Return type
List
direct_successors
DAGDependency.direct_successors(node_id)
Direct successors id of a given node as sorted list.
Parameters
node_id (int) – label of considered node.
Returns
direct successors id as a sorted list
Return type
List
draw
DAGDependency.draw(scale=0.7, filename=None, style='color')
Draws the DAGDependency graph.
This function needs pydot <https://github.com/erocarrera/pydot>, which in turn needs Graphviz <https://www.graphviz.org/>` to be installed.
Parameters
- scale (float) – scaling factor
- filename (str) – file path to save image to (format inferred from name)
- style (str) – ‘plain’: B&W graph ‘color’ (default): color input/output/op nodes
Returns
if in Jupyter notebook and not saving to file,
otherwise None.
Return type
Ipython.display.Image
get_all_edges
DAGDependency.get_all_edges()
Enumeration of all edges.
Returns
corresponding to the label.
Return type
List
get_edges
DAGDependency.get_edges(src_id, dest_id)
Edge enumeration between two nodes through method get_all_edge_data.
Parameters
- src_id (int) – label of the first node.
- dest_id (int) – label of the second node.
Returns
corresponding to all edges between the two nodes.
Return type
List
get_in_edges
DAGDependency.get_in_edges(node_id)
Enumeration of all incoming edges for a given node.
Parameters
node_id (int) – label of considered node.
Returns
corresponding incoming edges data.
Return type
List
get_node
DAGDependency.get_node(node_id)
Parameters
node_id (int) – label of considered node.
Returns
corresponding to the label.
Return type
node
get_nodes
DAGDependency.get_nodes()
Returns
iterator over all the nodes.
Return type
generator(dict)
get_out_edges
DAGDependency.get_out_edges(node_id)
Enumeration of all outgoing edges for a given node.
Parameters
node_id (int) – label of considered node.
Returns
corresponding outgoing edges data.
Return type
List
predecessors
DAGDependency.predecessors(node_id)
Predecessors id of a given node as sorted list.
Parameters
node_id (int) – label of considered node.
Returns
all predecessors id as a sorted list
Return type
List
size
DAGDependency.size()
Returns the number of gates in the circuit
successors
DAGDependency.successors(node_id)
Successors id of a given node as sorted list.
Parameters
node_id (int) – label of considered node.
Returns
all successors id as a sorted list
Return type
List
to_networkx
DAGDependency.to_networkx()
Returns a copy of the DAGDependency in networkx format.
to_retworkx
DAGDependency.to_retworkx()
Returns the DAGDependency in retworkx format.
topological_nodes
DAGDependency.topological_nodes()
Yield nodes in topological order.
Returns
node in topological order.
Return type
generator(DAGNode)
Attributes
calibrations
Return calibration dictionary.
The custom pulse definition of a given gate is of the form
{‘gate_name’: {(qubits, params): schedule}}
global_phase
Return the global phase of the circuit.