shadow_state(wires, diffable=False)[source]

Transform a QNode returning a classical shadow into one that returns the reconstructed state in a differentiable manner.

Parameters
• wires (list[int] or list[list[int]]) – If a list of ints, this represents the wires over which to reconstruct the state. If a list of list of ints, a state is reconstructed for every element of the outer list, saving qfunc evaluations.

• diffable (bool) – If True, reconstruct the state in a differentiable fashion, where the gradient of the reconstructed state approaches the gradient of the true state in expectation. This comes at a performance cost.

Returns

The reconstructed states

Return type

list[tensor-like[complex]]

Example

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

@qml.qnode(dev)
def circuit(x):
qml.CNOT(wires=[0, 1])
qml.RX(x, wires=0)

>>> x = np.array(1.2)
>>> circuit(x)
tensor([[ 0.33714998+0.j        ,  0.007875  +0.228825j  ,
-0.010575  +0.22642499j,  0.33705002+0.01125j   ],
[ 0.007875  -0.228825j  ,  0.16104999+0.j        ,
0.17055   -0.0126j    ,  0.011025  -0.232575j  ],
[-0.010575  -0.22642499j,  0.17055   +0.0126j    ,
0.16704999+0.j        , -0.006075  -0.225225j  ],
[ 0.33705002-0.01125j   ,  0.011025  +0.232575j  ,
-0.006075  +0.225225j  ,  0.33475   +0.j        ]],
>>> qml.jacobian(lambda x: np.real(circuit(x)))(x)
array([[-0.245025, -0.005325,  0.004275, -0.2358  ],
[-0.005325,  0.235275,  0.2358  , -0.004275],
[ 0.004275,  0.2358  ,  0.244875, -0.002175],
[-0.2358  , -0.004275, -0.002175, -0.235125]])


Using PennyLane

Development

API