qml.state

state()[source]

Quantum state in the computational basis.

This function accepts no observables and instead instructs the QNode to return its state. A wires argument should not be provided since state() always returns a pure state describing all wires in the device.

Note that the output shape of this measurement process depends on the number of wires defined for the device.

Example:

dev = qml.device("default.qubit", wires=2)

@qml.qnode(dev)
def circuit():
    qml.Hadamard(wires=1)
    return qml.state()

Executing this QNode:

>>> circuit()
array([0.70710678+0.j, 0.70710678+0.j, 0.        +0.j, 0.        +0.j])

The returned array is in lexicographic order. Hence, we have a \(1/\sqrt{2}\) amplitude in both \(|00\rangle\) and \(|01\rangle\).

Note

Differentiating state() is currently only supported when using the classical backpropagation differentiation method (diff_method="backprop") with a compatible device.

A QNode with the qml.state output can be used in a cost function with is then differentiated:

>>> dev = qml.device('default.qubit', wires=2)
>>> qml.qnode(dev, diff_method="backprop")
... def test(x):
...     qml.RY(x, wires=[0])
...     return qml.state()
>>> def cost(x):
...     return np.abs(test(x)[0])
>>> cost(x)
tensor(0.98877108, requires_grad=True)
>>> qml.grad(cost)(x)
-0.07471906623679961