class grad(func, argnum=None, method=None, h=None)[source]

Bases: object

Returns the gradient as a callable function of hybrid quantum-classical functions. qjit() and Autograd compatible.

By default, gradients are computed for arguments which contain the property requires_grad=True. Alternatively, the argnum keyword argument can be specified to compute gradients for function arguments without this property, such as scalars, lists, tuples, dicts, or vanilla NumPy arrays. Setting argnum to the index of an argument with requires_grad=False will raise a NonDifferentiableError.

When the output gradient function is executed, both the forward pass and the backward pass will be performed in order to compute the gradient. The value of the forward pass is available via the forward property.


grad is intended to be used with the Autograd interface only.


When used with qjit(), this function currently only supports the Catalyst compiler. See catalyst.grad() for more details.

Please see the Catalyst quickstart guide, as well as the sharp bits and debugging tips page for an overview of the differences between Catalyst and PennyLane.

  • func (function) – a plain QNode, or a Python function that contains a combination of quantum and classical nodes

  • argnum (int, list(int), None) – Which argument(s) to take the gradient with respect to. By default, the arguments themselves are used to determine differentiability, by examining the requires_grad property.

  • method (str) –

    Specifies the gradient method when used with the qjit() decorator. Outside of qjit(), this keyword argument has no effect and should not be set. In just-in-time (JIT) mode, this can be any of ["auto", "fd"], where:

    • "auto" represents deferring the quantum differentiation to the method specified by the QNode, while the classical computation is differentiated using traditional auto-diff. Catalyst supports "parameter-shift" and "adjoint" on internal QNodes. QNodes with diff_method="finite-diff" are not supported with "auto".

    • "fd" represents first-order finite-differences for the entire hybrid function.

  • h (float) – The step-size value for the finite-difference ("fd") method within qjit() decorated functions. This value has no effect in non-compiled functions.


The function that returns the gradient of the input function with respect to the differentiable arguments, or, if specified, the arguments in argnum.

Return type



The result of the forward pass calculated while performing backpropagation.


The result of the forward pass calculated while performing backpropagation. Will return None if the backpropagation has not yet been performed.