Repository: PennyLaneAI/pennylane
Pull request #7198 (2025-04-03 20:02:00)

Integrate new hadamard grad modes
**Context:**

Branching off of #7046 , this PR just integrates the new modes with our execution pipeline and makes it so we can specify `diff_method="hadamard-reversed"`, etc.

Still thinking about tests.

**Description of the Change:**

Updates how we setup the `ExecutionConfig` to automatically chose the mode based on the `diff_method` string.

**Benefits:**

Easier use of different hadamard modes.

**Possible Drawbacks:**

Does this really provide more usability over just using `gradient_kwargs`? I'm not sure. It also starts to make this list of possible `diff_method` strings a bit long.

**Related GitHub Issues:**


github-actions[bot]: Hello. You may have forgotten to update the changelog!
Please edit [`doc/releases/changelog-dev.md`](/PennyLaneAI/pennylane/blob/master/doc/releases/changelog-dev.md) with:
* A one-to-two sentence description of the change. You may include a small working example for new features.
* A link back to this PR.
* Your name (or GitHub username) in the contributors section.
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/PennyLaneAI/pennylane/pull/7198?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI) Report
Attention: Patch coverage is `95.00000%` with `1 line` in your changes missing coverage. Please review.
> Project coverage is 99.64%. Comparing base [(`85f6ff7`)](https://app.codecov.io/gh/PennyLaneAI/pennylane/commit/85f6ff7f65629f850e086d6a5189464cf04845b8?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI) to head [(`7534133`)](https://app.codecov.io/gh/PennyLaneAI/pennylane/commit/75341333e52868e908c810a9f046a52b93336d90?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI).
> Report is 2 commits behind head on master.

| [Files with missing lines](https://app.codecov.io/gh/PennyLaneAI/pennylane/pull/7198?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI) | Patch % | Lines |
|---|---|---|
| [pennylane/workflow/resolution.py](https://app.codecov.io/gh/PennyLaneAI/pennylane/pull/7198?src=pr&el=tree&filepath=pennylane%2Fworkflow%2Fresolution.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI#diff-cGVubnlsYW5lL3dvcmtmbG93L3Jlc29sdXRpb24ucHk=) | 94.44% | [1 Missing :warning: ](https://app.codecov.io/gh/PennyLaneAI/pennylane/pull/7198?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI) |

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##           master    #7198      +/-   ##
==========================================
- Coverage   99.64%   99.64%   -0.01%     
==========================================
  Files         511      513       +2     
  Lines       49885    50072     +187     
==========================================
+ Hits        49709    49895     +186     
- Misses        176      177       +1     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/PennyLaneAI/pennylane/pull/7198?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=PennyLaneAI).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>

Patch:
diff --git a/doc/introduction/interfaces.rst b/doc/introduction/interfaces.rst
index dcf82b12d..5bd0d8623 100644
--- a/doc/introduction/interfaces.rst
+++ b/doc/introduction/interfaces.rst
@@ -250,6 +250,25 @@ with the number of trainable circuit parameters.
 
 * ``"hadamard"``: Use hadamard tests on the generators for all compatible quantum operations arguments.
 
+* ``"reversed-hadamard"``: Use a variant of ``"hadamard"``, where the role of the
+  observable being measured and the generators of the unitary operations in the
+  circuit are reversed; the generators are now the observables, and the Pauli
+  decomposition of the observables are now gates in the circuit. More information 
+  can be found in the documentation for :func:`qml.gradients.hadamard_grad <pennylane.gradients.hadamard_grad>` 
+  and the `original paper outlining this gradient method <https://arxiv.org/pdf/2408.05406>`__.
+
+* ``"direct-hadamard"``: Use a variant of ``"hadamard"``, where the additional auxiliary
+  qubit needed in ``"hadamard"`` is exchanged for additional circuit executions.
+  More information can be found in the documentation for :func:`qml.gradients.hadamard_grad <pennylane.gradients.hadamard_grad>` 
+  and the `original paper outlining this gradient method <https://arxiv.org/pdf/2408.05406>`__.
+
+* ``"reversed-direct-hadamard"``: Use a variant of ``"direct-hadamard"``, where 
+  the role of the observable and the generators of the unitary operations in the 
+  circuit swap in a similar fashion to the ``"reversed-hadamard"`` method. More 
+  information can be found in the documentation for :func:`qml.gradients.hadamard_grad <pennylane.gradients.hadamard_grad>` 
+  and the
+  `original paper outlining this gradient method <https://arxiv.org/pdf/2408.05406>`__.
+
 * :func:`qml.gradients.stoch_pulse_grad <pennylane.gradients.stoch_pulse_grad>`: Use a stochastic variant of the
   parameter-shift rule for pulse programs.
 
@@ -408,81 +427,111 @@ At the moment, it takes into account the following parameters:
 
 .. rst-class:: tb
 
-+-------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
-|                                                 | **Return type**                                                                                                                                        |
-+==================+==============================+==============+===============+==============+==============+===============+================+================+=============+=============+=============+
-| **Interface**    |**Differentiation method**    | state        |density matrix |  probs       | sample       |expval (obs)   | expval (herm)  | expval (proj)  | var         | vn entropy  | mutual info |
-+------------------+------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-| ``None``         | ``"device"``                 |    :rd:`1`   |      :rd:`1`  |   :rd:`1`    | :rd:`9`      |  :rd:`1`      | :rd:`1`        | :rd:`1`        | :rd:`1`     | :rd:`1`     | :rd:`1`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"backprop"``               |    :rd:`1`   |      :rd:`1`  |   :rd:`1`    | :rd:`9`      |  :rd:`1`      | :rd:`1`        | :rd:`1`        | :rd:`1`     | :rd:`1`     | :rd:`1`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"adjoint"``                |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"parameter-shift"``        |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"finite-diff"``            |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"spsa"``                   |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"hadamard"``               |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
-+------------------+------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-| ``"autograd"``   | ``"device"``                 |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"backprop"``               |     :gr:`4`  |   :gr:`4`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"adjoint"``                |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"parameter-shift"``        |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"finite-diff"``            |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"spsa"``                   |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"hadamard"``               |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
-+------------------+------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-| ``"jax"``        | ``"device"``                 |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"backprop"``               |     :gr:`5`  |   :gr:`5`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"adjoint"``                |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"parameter-shift"``        |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"finite-diff"``            |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"spsa"``                   |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"hadamard"``               |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
-+------------------+------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-| ``"tf"``         | ``"device"``                 |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"backprop"``               |     :gr:`5`  |   :gr:`5`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"adjoint"``                |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"parameter-shift"``        |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"finite-diff"``            |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"spsa"``                   |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"hadamard"``               |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
-+------------------+------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-| ``"torch"``      | ``"device"``                 |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"backprop"``               |     :gr:`5`  |   :gr:`5`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"adjoint"``                |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"parameter-shift"``        |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"finite-diff"``            |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"spsa"``                   |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
-+                  +------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
-|                  | ``"hadamard"``               |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
-+------------------+------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
++--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
+|                                                  | **Return type**                                                                                                                                        |
++==================+===============================+==============+===============+==============+==============+===============+================+================+=============+=============+=============+
+| **Interface**    |**Differentiation method**     | state        |density matrix |  probs       | sample       |expval (obs)   | expval (herm)  | expval (proj)  | var         | vn entropy  | mutual info |
++------------------+-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+| ``None``         | ``"device"``                  |    :rd:`1`   |      :rd:`1`  |   :rd:`1`    | :rd:`9`      |  :rd:`1`      | :rd:`1`        | :rd:`1`        | :rd:`1`     | :rd:`1`     | :rd:`1`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"backprop"``                |    :rd:`1`   |      :rd:`1`  |   :rd:`1`    | :rd:`9`      |  :rd:`1`      | :rd:`1`        | :rd:`1`        | :rd:`1`     | :rd:`1`     | :rd:`1`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"adjoint"``                 |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"parameter-shift"``         |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"finite-diff"``             |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"spsa"``                    |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"hadamard"``                |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-hadamard"``       |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"direct-hadamard"``         |    :rd:`2`   |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-direct-hadamard"``|   :rd:`2`    |     :rd:`2`   |    :rd:`2`   | :rd:`9`      | :rd:`2`       |   :rd:`2`      | :rd:`2`        | :rd:`2`     | :rd:`2`     | :rd:`2`     |
++------------------+-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+| ``"autograd"``   | ``"device"``                  |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"backprop"``                |     :gr:`4`  |   :gr:`4`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"adjoint"``                 |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"parameter-shift"``         |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"finite-diff"``             |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"spsa"``                    |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"hadamard"``                |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-hadamard"``       |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"direct-hadamard"``         |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-direct-hadamard"``|   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++------------------+-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+| ``"jax"``        | ``"device"``                  |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"backprop"``                |     :gr:`5`  |   :gr:`5`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"adjoint"``                 |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"parameter-shift"``         |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"finite-diff"``             |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"spsa"``                    |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"hadamard"``                |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-hadamard"``       |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"direct-hadamard"``         |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-direct-hadamard"``|   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++------------------+-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+| ``"tf"``         | ``"device"``                  |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"backprop"``                |     :gr:`5`  |   :gr:`5`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"adjoint"``                 |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"parameter-shift"``         |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"finite-diff"``             |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"spsa"``                    |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"hadamard"``                |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-hadamard"``       |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"direct-hadamard"``         |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-direct-hadamard"``|   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++------------------+-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+| ``"torch"``      | ``"device"``                  |  :rd:`3`     |      :rd:`3`  |    :rd:`3`   | :rd:`9`      |   :rd:`3`     |  :rd:`3`       |   :rd:`3`      | :rd:`3`     | :rd:`3`     | :rd:`3`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"backprop"``                |     :gr:`5`  |   :gr:`5`     |     :gr:`5`  |     :rd:`9`  |   :gr:`5`     |    :gr:`5`     |   :gr:`5`      | :gr:`5`     | :gr:`5`     | :gr:`5`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"adjoint"``                 |      :gr:`7` |     :gr:`7`   |  :gr:`7`     | :rd:`9`      |      :gr:`7`  |  :gr:`7`       |   :gr:`7`      | :gr:`7`     | :gr:`7`     | :gr:`7`     |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"parameter-shift"``         |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"finite-diff"``             |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"spsa"``                    |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :gr:`8`   |   :gr:`8`   |   :gr:`8`   |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"hadamard"``                |   :rd:`10`   |    :rd:`10`   |   :gr:`8`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-hadamard"``       |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"direct-hadamard"``         |   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++                  +-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
+|                  | ``"reversed-direct-hadamard"``|   :rd:`10`   |    :rd:`10`   |   :rd:`2`    |  :rd:`9`     |   :gr:`8`     |   :gr:`8`      | :gr:`8`        |   :rd:`11`  |   :rd:`10`  |   :rd:`10`  |
++------------------+-------------------------------+--------------+---------------+--------------+--------------+---------------+----------------+----------------+-------------+-------------+-------------+
 
 1. Not supported. Gradients are not computed even though ``diff_method`` is provided. Fails with error.
 2. Not supported. Gradients are not computed even though ``diff_method`` is provided. Warns that no auto-differentiation framework is being used, but does not fail.
diff --git a/pennylane/gradients/hadamard_gradient.py b/pennylane/gradients/hadamard_gradient.py
index 93392192b..67b1865dc 100755
--- a/pennylane/gradients/hadamard_gradient.py
+++ b/pennylane/gradients/hadamard_gradient.py
@@ -275,6 +275,81 @@ def hadamard_grad(
         >>> params = jax.numpy.array([0.1, 0.2, 0.3])
         >>> jax.jacobian(circuit)(params)
         Array([-0.3875172 , -0.18884787, -0.38355704], dtype=float64)
+
+    .. details::
+        :title: Variants of the standard hadamard gradient
+
+        This gradient method has three modes that are adaptations of the standard Hadamard gradient
+        method (these are outlined in detail in `arXiv:2408.05406 <https://arxiv.org/pdf/2408.05406>`__).
+
+        **Reversed mode**
+
+        With the ``"reversed"`` mode, the observable being measured and the generators of the unitary
+        operations in the circuit are reversed; the generators are now the observables, and the Pauli
+        decomposition of the observables are now gates in the circuit:
+
+        .. code-block:: pycon
+
+            >>> dev = qml.device('default.qubit')
+            >>> @qml.qnode(dev)
+            ... def circuit(x):
+            ...     qml.evolve(qml.X(0) @ qml.X(1) + qml.Z(0) @ qml.Z(1) + qml.H(0), x)
+            ...     return qml.expval(qml.Z(0))
+            ...
+            >>> grad = qml.gradients.hadamard_grad(circuit, mode='reversed')
+            >>> print(qml.draw(grad)(numpy.array(0.5)))
+            0: ─╭Exp(-0.50j 𝓗)─╭Z────┤ ╭<(-1.00*𝓗)@Y>
+            1: ─╰Exp(-0.50j 𝓗)─│─────┤ ├<(-1.00*𝓗)@Y>
+            2: ──H─────────────╰●──H─┤ ╰<(-1.00*𝓗)@Y>
+
+        **Direct mode**
+
+        With the ``"direct"`` mode, the additional auxiliary qubit needed in the standard Hadamard gradient
+        is exchanged for additional circuit executions:
+
+        .. code-block:: pycon
+
+            >>> grad = qml.gradients.hadamard_grad(circuit, mode='direct')
+            >>> print(qml.draw(grad)(numpy.array(0.5)))
+            0: ─╭Exp(-0.50j 𝓗)──Exp(-0.79j X)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)────────────────┤
+
+            0: ─╭Exp(-0.50j 𝓗)──Exp(0.79j X)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)───────────────┤
+
+            0: ─╭Exp(-0.50j 𝓗)─╭Exp(-0.79j X@X)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)─╰Exp(-0.79j X@X)─┤
+
+            0: ─╭Exp(-0.50j 𝓗)─╭Exp(0.79j X@X)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)─╰Exp(0.79j X@X)─┤
+
+            0: ─╭Exp(-0.50j 𝓗)──Exp(-0.79j Z)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)────────────────┤
+
+            0: ─╭Exp(-0.50j 𝓗)──Exp(0.79j Z)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)───────────────┤
+
+            0: ─╭Exp(-0.50j 𝓗)─╭Exp(-0.79j Z@Z)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)─╰Exp(-0.79j Z@Z)─┤
+
+            0: ─╭Exp(-0.50j 𝓗)─╭Exp(0.79j Z@Z)─┤  <Z>
+            1: ─╰Exp(-0.50j 𝓗)─╰Exp(0.79j Z@Z)─┤
+
+        **Reversed direct mode**
+
+        The ``"reversed-direct"`` mode is a combination of the ``"direct"`` and ``"revered"`` modes,
+        where the role of the observable and the generators of the unitary operations in the circuit
+        swap, and the additional auxiliary qubit is exchanged for additional circuit executions:
+
+        .. code-block:: pycon
+
+            >>> grad = qml.gradients.hadamard_grad(circuit, mode='reversed-direct')
+            >>> print(qml.draw(grad)(numpy.array(0.5)))
+            0: ─╭Exp(-0.50j 𝓗)──Exp(-0.79j Z)─┤ ╭<-1.00*𝓗>
+            1: ─╰Exp(-0.50j 𝓗)────────────────┤ ╰<-1.00*𝓗>
+
+            0: ─╭Exp(-0.50j 𝓗)──Exp(0.79j Z)─┤ ╭<-1.00*𝓗>
+            1: ─╰Exp(-0.50j 𝓗)───────────────┤ ╰<-1.00*𝓗>
     """
 
     modes = {
diff --git a/pennylane/ops/functions/evolve.py b/pennylane/ops/functions/evolve.py
index f191a0367..bcea7fd2a 100644
--- a/pennylane/ops/functions/evolve.py
+++ b/pennylane/ops/functions/evolve.py
@@ -15,12 +15,18 @@
 This module contains the qml.evolve function.
 """
 from functools import singledispatch
+from typing import Optional, overload
 
 from pennylane.operation import Operator
 from pennylane.ops import Evolution
 from pennylane.pulse import ParametrizedEvolution, ParametrizedHamiltonian
+from pennylane.typing import TensorLike
 
 
+@overload
+def evolve(op: ParametrizedHamiltonian, **kwargs) -> ParametrizedEvolution: ...
+@overload
+def evolve(op: Operator, coeff: TensorLike = 1, num_steps: Optional[int] = None) -> Evolution: ...
 @singledispatch
 def evolve(*args, **kwargs):  # pylint: disable=unused-argument
     r"""This method is dispatched and its functionality depends on the type of the input ``op``.
diff --git a/pennylane/workflow/resolution.py b/pennylane/workflow/resolution.py
index 3f7d045de..5f9fe55f8 100644
--- a/pennylane/workflow/resolution.py
+++ b/pennylane/workflow/resolution.py
@@ -13,6 +13,7 @@
 # limitations under the License.
 """This module contains the necessary helper functions for setting up the workflow for execution."""
 from collections.abc import Callable
+from copy import copy
 from dataclasses import replace
 from importlib.metadata import version
 from importlib.util import find_spec
@@ -35,6 +36,9 @@ SupportedDiffMethods = Literal[
     "adjoint",
     "parameter-shift",
     "hadamard",
+    "reversed-hadamard",
+    "direct-hadamard",
+    "reversed-direct-hadamard",
     "finite-diff",
     "spsa",
 ]
@@ -161,6 +165,33 @@ def _resolve_mcm_config(
     return replace(mcm_config, **updated_values)
 
 
+def _resolve_hadamard(
+    initial_config: "qml.devices.ExecutionConfig", device: "qml.devices.Device"
+) -> "qml.devices.ExecutionConfig":
+    diff_method = initial_config.gradient_method
+    updated_values = {"gradient_method": diff_method}
+    if diff_method != "hadamard" and "mode" in initial_config.gradient_keyword_arguments:
+        raise ValueError(
+            f"diff_method={diff_method} cannot be provided with a 'mode' in the gradient_kwargs."
+        )
+
+    hadamard_mode_map = {
+        "hadamard": "standard",
+        "reversed-hadamard": "reversed",
+        "direct-hadamard": "direct",
+        "reversed-direct-hadamard": "reversed-direct",
+    }
+    gradient_kwargs = copy(initial_config.gradient_keyword_arguments)
+    if "mode" not in gradient_kwargs:
+        gradient_kwargs["mode"] = hadamard_mode_map[diff_method]
+
+    if "device_wires" not in gradient_kwargs and "aux_wire" not in gradient_kwargs:
+        gradient_kwargs["device_wires"] = device.wires
+    updated_values["gradient_keyword_arguments"] = gradient_kwargs
+    updated_values["gradient_method"] = qml.gradients.hadamard_grad
+    return replace(initial_config, **updated_values)
+
+
 @debug_logger
 def _resolve_diff_method(
     initial_config: "qml.devices.ExecutionConfig",
@@ -193,9 +224,16 @@ def _resolve_diff_method(
             f"Device {device} does not support {diff_method} with requested circuit."
         )
 
+    if "hadamard" in str(diff_method):
+        return _resolve_hadamard(initial_config, device)
+
     if diff_method in {"best", "parameter-shift"}:
         if tape and any(isinstance(op, qml.operation.CV) and op.name != "Identity" for op in tape):
             updated_values["gradient_method"] = qml.gradients.param_shift_cv
+            updated_values["gradient_keyword_arguments"] = dict(
+                initial_config.gradient_keyword_arguments
+            )
+            updated_values["gradient_keyword_arguments"]["dev"] = device
         else:
             updated_values["gradient_method"] = qml.gradients.param_shift
 
@@ -203,7 +241,6 @@ def _resolve_diff_method(
         gradient_transform_map = {
             "finite-diff": qml.gradients.finite_diff,
             "spsa": qml.gradients.spsa_grad,
-            "hadamard": qml.gradients.hadamard_grad,
         }
 
         if diff_method in gradient_transform_map:
@@ -237,7 +274,6 @@ def _resolve_execution_config(
         qml.devices.ExecutionConfig: resolved execution configuration
     """
     updated_values = {}
-    updated_values["gradient_keyword_arguments"] = dict(execution_config.gradient_keyword_arguments)
 
     if execution_config.interface in {Interface.JAX, Interface.JAX_JIT} and not isinstance(
         execution_config.gradient_method, Callable
@@ -262,9 +298,6 @@ def _resolve_execution_config(
             " and the provided circuit."
         )
 
-    if execution_config.gradient_method is qml.gradients.param_shift_cv:
-        updated_values["gradient_keyword_arguments"]["dev"] = device
-
     # Mid-circuit measurement configuration validation
     # If the user specifies `interface=None`, regular execution considers it numpy, but the mcm
     # workflow still needs to know if jax-jit is used
@@ -279,8 +312,6 @@ def _resolve_execution_config(
 
     updated_values["interface"] = interface
     updated_values["mcm_config"] = mcm_config
-
     execution_config = replace(execution_config, **updated_values)
     execution_config = device.setup_execution_config(execution_config)
-
     return execution_config


Test patch:
diff --git a/tests/workflow/interfaces/qnode/test_qnode_integration_all.py b/tests/workflow/interfaces/qnode/test_qnode_integration_all.py
new file mode 100644
index 000000000..213e78129
--- /dev/null
+++ b/tests/workflow/interfaces/qnode/test_qnode_integration_all.py
@@ -0,0 +1,76 @@
+# Copyright 2018-2025 Xanadu Quantum Technologies Inc.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+#     http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""
+Integration tests for the qnode for all interfaces.
+"""
+import pytest
+
+import pennylane as qml
+
+
+@pytest.mark.parametrize(
+    "interface",
+    (
+        pytest.param("autograd", marks=pytest.mark.autograd),
+        pytest.param("jax", marks=pytest.mark.jax),
+        pytest.param("torch", marks=pytest.mark.torch),
+        pytest.param(
+            "tensorflow", marks=[pytest.mark.tf, pytest.mark.xfail]
+        ),  # type casting shenanigans
+    ),
+)
+class TestHadamardGradients:
+
+    @pytest.mark.parametrize("diff_method", ["hadamard", "reversed-hadamard"])
+    def test_nonstandard_device_wires(self, interface, diff_method):
+        """Test that we can automatically determine a work wire with nonstandard wire labels."""
+
+        dev = qml.device("default.qubit", wires=("a", "b"))
+
+        @qml.qnode(dev, diff_method=diff_method)
+        def circuit(x):
+            qml.RX(x, "a")
+            return qml.expval(qml.Z("a"))
+
+        x = qml.math.asarray(0.5, requires_grad=True, like=interface)
+        result = qml.math.grad(circuit)(x)
+        assert qml.math.allclose(result, -qml.math.sin(x))
+
+    @pytest.mark.parametrize(
+        "diff_method, num_executions",
+        [
+            ("hadamard", 3),
+            ("reversed-hadamard", 2),
+            ("direct-hadamard", 5),
+            ("reversed-direct-hadamard", 3),
+        ],
+    )
+    def test_hamiltonian_generator(self, diff_method, interface, num_executions):
+        """Check that we perform the expected number of executions when having a hamiltonian generator."""
+        dev = qml.device("default.qubit")
+
+        @qml.qnode(dev, diff_method=diff_method)
+        def c(x):
+            qml.evolve(qml.X(0) + qml.X(1), x)
+            return qml.expval(qml.Z(0))
+
+        x = qml.math.asarray(1.2, requires_grad=True, like=interface)
+
+        with dev.tracker:
+            result = qml.math.grad(c)(x)
+
+        expected = -2 * qml.math.sin(2 * x)
+        assert qml.math.allclose(result, expected)
+
+        assert dev.tracker.totals["executions"] == num_executions
diff --git a/tests/workflow/test_resolve_diff_method.py b/tests/workflow/test_resolve_diff_method.py
index 944d183ac..4fdb88a5e 100644
--- a/tests/workflow/test_resolve_diff_method.py
+++ b/tests/workflow/test_resolve_diff_method.py
@@ -184,3 +184,55 @@ class TestResolveDiffMethod:
             qml.QuantumFunctionError, match="Differentiation method invalid-method not recognized"
         ):
             _resolve_diff_method(initial_config, dev)
+
+    @pytest.mark.parametrize(
+        "diff_method, mode",
+        [
+            ("hadamard", "standard"),
+            ("reversed-hadamard", "reversed"),
+            ("direct-hadamard", "direct"),
+            ("reversed-direct-hadamard", "reversed-direct"),
+        ],
+    )
+    def test_hadamard_methods(self, diff_method, mode):
+        """Test that we can resolve the hadamard methods correctly."""
+
+        dev = qml.device("default.qubit")
+        initial_config = ExecutionConfig(gradient_method=diff_method)
+        processed = _resolve_diff_method(initial_config, dev)
+        assert processed.gradient_method == qml.gradients.hadamard_grad
+        assert processed.gradient_keyword_arguments == {"mode": mode, "device_wires": None}
+
+    def test_hadamard_device_wires(self):
+        """Test that device wires are added to the gradient keyword args."""
+
+        dev = qml.device("default.qubit", wires=("a", "b"))
+        initial_config = ExecutionConfig(gradient_method="hadamard")
+        processed = _resolve_diff_method(initial_config, dev)
+        assert processed.gradient_method == qml.gradients.hadamard_grad
+        assert processed.gradient_keyword_arguments == {
+            "mode": "standard",
+            "device_wires": dev.wires,
+        }
+
+    @pytest.mark.parametrize(
+        "diff_method", ("reversed-hadamard", "direct-hadamard", "reversed-direct-hadamard")
+    )
+    def test_error_if_specific_hadamard_variant_and_mode(self, diff_method):
+
+        dev = qml.device("default.qubit")
+
+        initial_config = ExecutionConfig(
+            gradient_method=diff_method, gradient_keyword_arguments={"mode": "reversed"}
+        )
+        with pytest.raises(ValueError, match="cannot be provided with a 'mode'"):
+            _resolve_diff_method(initial_config, dev)
+
+    def test_specify_hadamard_and_mode(self):
+        dev = qml.device("default.qubit")
+        initial_config = ExecutionConfig(
+            gradient_method="hadamard", gradient_keyword_arguments={"mode": "reversed"}
+        )
+        processed = _resolve_diff_method(initial_config, dev)
+        assert processed.gradient_method == qml.gradients.hadamard_grad
+        assert processed.gradient_keyword_arguments == {"mode": "reversed", "device_wires": None}