class tensor_wrapper(obj)[source]

Decorator that wraps callable objects and classes so that they both accept a requires_grad keyword argument, as well as returning a PennyLane tensor.

Only if the decorated object returns an ndarray is the output converted to a tensor; this avoids superfluous conversion of scalars and other native-Python types.


This wrapper does not enable autodifferentiation of the wrapped function, it merely adds support for tensor output.


obj – a callable object or class


By default, the ones function provided by Autograd constructs standard ndarray objects, and does not permit a requires_grad argument:

>>> from autograd.numpy import ones
>>> ones([2, 2])
array([[1., 1.],
    [1., 1.]])
>>> ones([2, 2], requires_grad=True)
TypeError: ones() got an unexpected keyword argument 'requires_grad'

tensor_wrapper both enables construction of tensor objects, while also converting the output.

>>> from pennylane import numpy as np
>>> ones = np.tensor_wrapper(ones)
>>> ones([2, 2], requires_grad=True)
tensor([[1., 1.],
    [1., 1.]], requires_grad=True)