The PennyLane circuit drawer (both the text version qml.draw
and the matplotlib version qml.draw_mpl
) have keyword arguments that control how you want the circuit displayed. By default, it will print the circuit as defined in the QNode, but you can pass expansion_strategy="device"
to instead display the circuit as it will be expanded for the device.
For example:
dev = qml.device("default.qubit", wires=4)
hf_state = np.array([1, 1, 0, 0], requires_grad=True)
coordinates = np.array([0.0, 0.0, -0.66140414, 0.0, 0.0, 0.66140414])
H, _ = qml.qchem.molecular_hamiltonian(["H", "H"], coordinates)
@qml.qnode(dev)
def circuit(weights):
qml.UCCSD(
weights,
wires=[0, 1, 2, 3],
init_state=hf_state,
s_wires=[[0, 1, 2], [1, 2, 3]],
d_wires=[[[0, 1], [2, 3]]],
)
return qml.expval(H)
weights = np.random.normal(0, np.pi, 3)
Drawing the circuit with no arguments:
>>> print(qml.draw(circuit)(weights))
0: ─╭UCCSD(M0)─┤ ╭<𝓗>
1: ─├UCCSD(M0)─┤ ├<𝓗>
2: ─├UCCSD(M0)─┤ ├<𝓗>
3: ─╰UCCSD(M0)─┤ ╰<𝓗>
Drawing the circuit with the expansion strategy set:
>>> print(qml.draw(circuit, expansion_strategy="device")(weights))
0: ─╭BasisState(M0)──H─────────╭●───────────────────────╭●──────────H──────────RX(-1.57)─╭●──────────────────────────────╭●──────────RX(1.57)───H─────────╭●──────────────────────────────╭●──────────H─────────H─╭●──────────────────────────────╭●──H──RX(-1.57)─╭●────────────────────────╭●──RX(1.57)──H─────────╭●────────────────────────╭●──H──────────RX(-1.57)─╭●────────────────────────╭●──────────RX(1.57)──RX(-1.57)─╭●───────────────────────────────╭●──RX(1.57)──RX(-1.57)─╭●─────────────────╭●──RX(1.57)───H─╭●──────────────────╭●─────────H──────────────────────────────────────────────────────────────────────────────┤ ╭<𝓗>
1: ─├BasisState(M0)──H─────────╰X─╭●─────────────────╭●─╰X──────────H──────────H─────────╰X─╭●─────────────────╭●────────╰X──────────H──────────RX(-1.57)─╰X─╭●─────────────────╭●────────╰X──────────RX(1.57)──H─╰X─╭●─────────────────╭●────────╰X──H──H─────────╰X─╭●──────────────────╭●─╰X──H─────────RX(-1.57)─╰X─╭●──────────────────╭●─╰X──RX(1.57)───RX(-1.57)─╰X─╭●──────────────────╭●─╰X──────────RX(1.57)──RX(-1.57)─╰X─╭●──────────────────╭●────────╰X──RX(1.57)────────────╰X─╭●───────────╭●─╰X───────────────╰X─╭●────────────╭●─╰X─────────RX(-1.57)─╭●──────────────────╭●──RX(1.57)───H─╭●─────────────────╭●─────────H─┤ ├<𝓗>
2: ─├BasisState(M0)──RX(-1.57)────╰X─╭●───────────╭●─╰X──RX(1.57)───RX(-1.57)───────────────╰X─╭●───────────╭●─╰X─────────RX(1.57)───RX(-1.57)───────────────╰X─╭●───────────╭●─╰X─────────RX(1.57)───H──────────────╰X─╭●───────────╭●─╰X─────────H──H───────────────╰X─╭●────────────╭●─╰X──H──H──────────────────────╰X─╭●────────────╭●─╰X──H──RX(-1.57)───────────────╰X─╭●────────────╭●─╰X──RX(1.57)───H──────────────────────╰X─╭●────────────╭●─╰X─────────H──H──────────────────────╰X──RZ(2.69)─╰X──H──RX(-1.57)───────╰X──RZ(-2.69)─╰X──RX(1.57)────────────╰X─╭●────────────╭●─╰X───────────────╰X─╭●───────────╭●─╰X───────────┤ ├<𝓗>
3: ─╰BasisState(M0)──H───────────────╰X──RZ(0.42)─╰X──H──RX(-1.57)─────────────────────────────╰X──RZ(0.42)─╰X──RX(1.57)──RX(-1.57)─────────────────────────────╰X──RZ(0.42)─╰X──RX(1.57)──RX(-1.57)────────────────────╰X──RZ(0.42)─╰X──RX(1.57)──H─────────────────────╰X──RZ(-0.42)─╰X──H──H────────────────────────────╰X──RZ(-0.42)─╰X──H──H─────────────────────────────╰X──RZ(-0.42)─╰X──H──RX(-1.57)────────────────────────────╰X──RZ(-0.42)─╰X──RX(1.57)──H──────────────────────────────────────────────────────────────────────────────────────────────────────╰X──RZ(-2.58)─╰X──H──RX(-1.57)───────╰X──RZ(2.58)─╰X──RX(1.57)────┤ ╰<𝓗>