Fragments a graph into a collection of subgraphs as well as returning the communication (quotient) graph.
graphis fragmented by disconnecting each
PrepareNodepair and finding the resultant disconnected subgraph fragments. Each node of the communication graph represents a subgraph fragment and the edges denote the flow of qubits between fragments due to the removed
This operation is designed for use as part of the circuit cutting workflow. Check out the
qml.cut_circuit()transform for more details.
graph (nx.MultiDiGraph) – directed multigraph containing measure and prepare nodes at cut locations
the subgraphs of the cut graph and the communication graph.
- Return type
Consider the following circuit with manually-placed wire cuts:
wire_cut_0 = qml.WireCut(wires=0) wire_cut_1 = qml.WireCut(wires=1) multi_wire_cut = qml.WireCut(wires=[0, 1]) ops = [ qml.RX(0.4, wires=0), wire_cut_0, qml.RY(0.5, wires=0), wire_cut_1, qml.CNOT(wires=[0, 1]), multi_wire_cut, qml.RZ(0.6, wires=1), ] measurements = [qml.expval(qml.PauliZ(0))] tape = qml.tape.QuantumTape(ops, measurements)
We can find the corresponding graph, remove all the wire cut nodes, and find the subgraphs and communication graph by using:
>>> graph = qml.transforms.qcut.tape_to_graph(tape) >>> qml.transforms.qcut.replace_wire_cut_nodes(graph) >>> qml.transforms.qcut.fragment_graph(graph) ((<networkx.classes.multidigraph.MultiDiGraph object at 0x7fb3b2311940>, <networkx.classes.multidigraph.MultiDiGraph object at 0x7fb3b2311c10>, <networkx.classes.multidigraph.MultiDiGraph object at 0x7fb3b23e2820>, <networkx.classes.multidigraph.MultiDiGraph object at 0x7fb3b23e27f0>), <networkx.classes.multidigraph.MultiDiGraph object at 0x7fb3b23e26a0>)
- What is PennyLane?
- Quantum circuits
- Gradients and training
- Quantum operators
- Inspecting circuits
- Compiling circuits
- Quantum Chemistry
- Quantum Datasets
- QNode returns
- Custom transforms
- Transforms library
- Decorators and utility functions
- Transforms developer functions
- Old transforms framework