diff --git a/doc/development/deprecations.rst b/doc/development/deprecations.rst
index 1f267b73629..9b8b68f04d2 100644
--- a/doc/development/deprecations.rst
+++ b/doc/development/deprecations.rst
@@ -9,6 +9,13 @@ deprecations are listed below.
Pending deprecations
--------------------
+* Specifying gradient keyword arguments as any additional keyword argument to the qnode is deprecated
+ and will be removed in v0.42. The gradient keyword arguments should be passed to the new
+ keyword argument ``gradient_kwargs`` via an explicit dictionary, like ``gradient_kwargs={"h": 1e-4}``.
+
+ - Deprecated in v0.41
+ - Will be removed in v0.42
+
* The `qml.gradients.hamiltonian_grad` function has been deprecated.
This gradient recipe is not required with the new operator arithmetic system.
diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md
index 8a22e87822a..9d7e3a50427 100644
--- a/doc/releases/changelog-dev.md
+++ b/doc/releases/changelog-dev.md
@@ -84,6 +84,12 @@
Deprecations 👋
+* Specifying gradient keyword arguments as any additional keyword argument to the qnode is deprecated
+ and will be removed in v0.42. The gradient keyword arguments should be passed to the new
+ keyword argument `gradient_kwargs` via an explicit dictionary. This change will improve qnode argument
+ validation.
+ [(#6828)](https://github.com/PennyLaneAI/pennylane/pull/6828)
+
* The `qml.gradients.hamiltonian_grad` function has been deprecated.
This gradient recipe is not required with the new operator arithmetic system.
[(#6849)](https://github.com/PennyLaneAI/pennylane/pull/6849)
diff --git a/pennylane/workflow/qnode.py b/pennylane/workflow/qnode.py
index 29430c9a645..39659dbc95e 100644
--- a/pennylane/workflow/qnode.py
+++ b/pennylane/workflow/qnode.py
@@ -133,7 +133,8 @@ def _validate_gradient_kwargs(gradient_kwargs: dict) -> None:
elif kwarg not in qml.gradients.SUPPORTED_GRADIENT_KWARGS:
warnings.warn(
f"Received gradient_kwarg {kwarg}, which is not included in the list of "
- "standard qnode gradient kwargs."
+ "standard qnode gradient kwargs. Please specify all gradient kwargs through "
+ "the gradient_kwargs argument as a dictionary."
)
@@ -284,9 +285,7 @@ class QNode:
as the name suggests. If not provided,
the device will determine the best choice automatically. For usage details, please refer to the
:doc:`dynamic quantum circuits page `.
-
- Keyword Args:
- **kwargs: Any additional keyword arguments provided are passed to the differentiation
+ gradient_kwargs (dict): A dictionary of keyword arguments that are passed to the differentiation
method. Please refer to the :mod:`qml.gradients <.gradients>` module for details
on supported options for your chosen gradient transform.
@@ -505,10 +504,12 @@ def __init__(
device_vjp: Union[None, bool] = False,
postselect_mode: Literal[None, "hw-like", "fill-shots"] = None,
mcm_method: Literal[None, "deferred", "one-shot", "tree-traversal"] = None,
- **gradient_kwargs,
+ gradient_kwargs: Optional[dict] = None,
+ **kwargs,
):
self._init_args = locals()
del self._init_args["self"]
+ del self._init_args["kwargs"]
if logger.isEnabledFor(logging.DEBUG):
logger.debug(
@@ -536,7 +537,16 @@ def __init__(
if not isinstance(device, qml.devices.Device):
device = qml.devices.LegacyDeviceFacade(device)
+ gradient_kwargs = gradient_kwargs or {}
+ if kwargs:
+ if any(k in qml.gradients.SUPPORTED_GRADIENT_KWARGS for k in list(kwargs.keys())):
+ warnings.warn(
+ f"Specifying gradient keyword arguments {list(kwargs.keys())} is deprecated and will be removed in v0.42. Instead, please specify all arguments in the gradient_kwargs argument.",
+ qml.PennyLaneDeprecationWarning,
+ )
+ gradient_kwargs |= kwargs
_validate_gradient_kwargs(gradient_kwargs)
+
if "shots" in inspect.signature(func).parameters:
warnings.warn(
"Detected 'shots' as an argument to the given quantum function. "
@@ -676,16 +686,19 @@ def circuit(x):
tensor(0.5403, dtype=torch.float64)
"""
if not kwargs:
- valid_params = (
- set(self._init_args.copy().pop("gradient_kwargs"))
- | qml.gradients.SUPPORTED_GRADIENT_KWARGS
- )
+ valid_params = set(self._init_args.copy()) | qml.gradients.SUPPORTED_GRADIENT_KWARGS
raise ValueError(
f"Must specify at least one configuration property to update. Valid properties are: {valid_params}."
)
original_init_args = self._init_args.copy()
- gradient_kwargs = original_init_args.pop("gradient_kwargs")
- original_init_args.update(gradient_kwargs)
+ # gradient_kwargs defaults to None
+ original_init_args["gradient_kwargs"] = original_init_args["gradient_kwargs"] or {}
+ # nested dictionary update
+ new_gradient_kwargs = kwargs.pop("gradient_kwargs", {})
+ old_gradient_kwargs = original_init_args.get("gradient_kwargs").copy()
+ old_gradient_kwargs.update(new_gradient_kwargs)
+ kwargs["gradient_kwargs"] = old_gradient_kwargs
+
original_init_args.update(kwargs)
updated_qn = QNode(**original_init_args)
# pylint: disable=protected-access
diff --git a/tests/gradients/core/test_pulse_gradient.py b/tests/gradients/core/test_pulse_gradient.py
index a5a44998156..b06b7c711d0 100644
--- a/tests/gradients/core/test_pulse_gradient.py
+++ b/tests/gradients/core/test_pulse_gradient.py
@@ -1385,7 +1385,10 @@ def test_simple_qnode_expval(self, num_split_times, shots, tol, seed):
ham_single_q_const = qml.pulse.constant * qml.PauliY(0)
@qml.qnode(
- dev, interface="jax", diff_method=stoch_pulse_grad, num_split_times=num_split_times
+ dev,
+ interface="jax",
+ diff_method=stoch_pulse_grad,
+ gradient_kwargs={"num_split_times": num_split_times},
)
def circuit(params):
qml.evolve(ham_single_q_const)(params, T)
@@ -1415,7 +1418,10 @@ def test_simple_qnode_expval_two_evolves(self, num_split_times, shots, tol, seed
ham_y = qml.pulse.constant * qml.PauliX(0)
@qml.qnode(
- dev, interface="jax", diff_method=stoch_pulse_grad, num_split_times=num_split_times
+ dev,
+ interface="jax",
+ diff_method=stoch_pulse_grad,
+ gradient_kwargs={"num_split_times": num_split_times},
)
def circuit(params):
qml.evolve(ham_x)(params[0], T_x)
@@ -1444,7 +1450,10 @@ def test_simple_qnode_probs(self, num_split_times, shots, tol, seed):
ham_single_q_const = qml.pulse.constant * qml.PauliY(0)
@qml.qnode(
- dev, interface="jax", diff_method=stoch_pulse_grad, num_split_times=num_split_times
+ dev,
+ interface="jax",
+ diff_method=stoch_pulse_grad,
+ gradient_kwargs={"num_split_times": num_split_times},
)
def circuit(params):
qml.evolve(ham_single_q_const)(params, T)
@@ -1471,7 +1480,10 @@ def test_simple_qnode_probs_expval(self, num_split_times, shots, tol, seed):
ham_single_q_const = qml.pulse.constant * qml.PauliY(0)
@qml.qnode(
- dev, interface="jax", diff_method=stoch_pulse_grad, num_split_times=num_split_times
+ dev,
+ interface="jax",
+ diff_method=stoch_pulse_grad,
+ gradient_kwargs={"num_split_times": num_split_times},
)
def circuit(params):
qml.evolve(ham_single_q_const)(params, T)
@@ -1504,7 +1516,10 @@ def test_simple_qnode_jit(self, num_split_times, time_interface):
ham_single_q_const = qml.pulse.constant * qml.PauliY(0)
@qml.qnode(
- dev, interface="jax", diff_method=stoch_pulse_grad, num_split_times=num_split_times
+ dev,
+ interface="jax",
+ diff_method=stoch_pulse_grad,
+ gradient_kwargs={"num_split_times": num_split_times},
)
def circuit(params, T=None):
qml.evolve(ham_single_q_const)(params, T)
@@ -1543,8 +1558,7 @@ def ansatz(params):
dev,
interface="jax",
diff_method=stoch_pulse_grad,
- num_split_times=num_split_times,
- sampler_seed=seed,
+ gradient_kwargs={"num_split_times": num_split_times, "sampler_seed": seed},
)
qnode_backprop = qml.QNode(ansatz, dev, interface="jax")
@@ -1575,8 +1589,7 @@ def test_qnode_probs_expval_broadcasting(self, num_split_times, shots, tol, seed
dev,
interface="jax",
diff_method=stoch_pulse_grad,
- num_split_times=num_split_times,
- use_broadcasting=True,
+ gradient_kwargs={"num_split_times": num_split_times, "use_broadcasting": True},
)
def circuit(params):
qml.evolve(ham_single_q_const)(params, T)
@@ -1620,18 +1633,22 @@ def ansatz(params):
dev,
interface="jax",
diff_method=stoch_pulse_grad,
- num_split_times=num_split_times,
- use_broadcasting=True,
- sampler_seed=seed,
+ gradient_kwargs={
+ "num_split_times": num_split_times,
+ "use_broadcasting": True,
+ "sampler_seed": seed,
+ },
)
circuit_no_bc = qml.QNode(
ansatz,
dev,
interface="jax",
diff_method=stoch_pulse_grad,
- num_split_times=num_split_times,
- use_broadcasting=False,
- sampler_seed=seed,
+ gradient_kwargs={
+ "num_split_times": num_split_times,
+ "use_broadcasting": False,
+ "sampler_seed": seed,
+ },
)
params = [jnp.array(0.4)]
jac_bc = jax.jacobian(circuit_bc)(params)
@@ -1685,9 +1702,7 @@ def ansatz(params):
dev,
interface="jax",
diff_method=qml.gradients.stoch_pulse_grad,
- num_split_times=7,
- use_broadcasting=True,
- sampler_seed=seed,
+ gradient_kwargs={"num_split_times": 7, "sampler_seed": seed, "use_broadcasting": True},
)
cost_jax = qml.QNode(ansatz, dev, interface="jax")
params = (0.42,)
@@ -1730,9 +1745,7 @@ def ansatz(params):
dev,
interface="jax",
diff_method=qml.gradients.stoch_pulse_grad,
- num_split_times=7,
- use_broadcasting=True,
- sampler_seed=seed,
+ gradient_kwargs={"num_split_times": 7, "sampler_seed": seed, "use_broadcasting": True},
)
cost_jax = qml.QNode(ansatz, dev, interface="jax")
diff --git a/tests/gradients/finite_diff/test_spsa_gradient.py b/tests/gradients/finite_diff/test_spsa_gradient.py
index 1bd2a198bca..413bc8ff6ec 100644
--- a/tests/gradients/finite_diff/test_spsa_gradient.py
+++ b/tests/gradients/finite_diff/test_spsa_gradient.py
@@ -161,7 +161,7 @@ def test_invalid_sampler_rng(self):
"""Tests that if sampler_rng has an unexpected type, an error is raised."""
dev = qml.device("default.qubit", wires=1)
- @qml.qnode(dev, diff_method="spsa", sampler_rng="foo")
+ @qml.qnode(dev, diff_method="spsa", gradient_kwargs={"sampler_rng": "foo"})
def circuit(param):
qml.RX(param, wires=0)
return qml.expval(qml.PauliZ(0))
diff --git a/tests/gradients/parameter_shift/test_cv_gradients.py b/tests/gradients/parameter_shift/test_cv_gradients.py
index c9709753283..55955396ab7 100644
--- a/tests/gradients/parameter_shift/test_cv_gradients.py
+++ b/tests/gradients/parameter_shift/test_cv_gradients.py
@@ -268,7 +268,11 @@ def qf(x, y):
grad_F = jax.grad(qf)(*par)
- @qml.qnode(device=gaussian_dev, diff_method="parameter-shift", force_order2=True)
+ @qml.qnode(
+ device=gaussian_dev,
+ diff_method="parameter-shift",
+ gradient_kwargs={"force_order2": True},
+ )
def qf2(x, y):
qml.Displacement(0.5, 0, wires=[0])
qml.Squeezing(x, 0, wires=[0])
diff --git a/tests/gradients/parameter_shift/test_parameter_shift_shot_vec.py b/tests/gradients/parameter_shift/test_parameter_shift_shot_vec.py
index 72e00eac0b0..e3151735e98 100644
--- a/tests/gradients/parameter_shift/test_parameter_shift_shot_vec.py
+++ b/tests/gradients/parameter_shift/test_parameter_shift_shot_vec.py
@@ -1970,12 +1970,12 @@ def expval(self, observable, **kwargs):
dev = DeviceSupporingSpecialObservable(wires=1, shots=None)
- @qml.qnode(dev, diff_method="parameter-shift", broadcast=broadcast)
+ @qml.qnode(dev, diff_method="parameter-shift", gradient_kwargs={"broadcast": broadcast})
def qnode(x):
qml.RY(x, wires=0)
return qml.expval(SpecialObservable(wires=0))
- @qml.qnode(dev, diff_method="parameter-shift", broadcast=broadcast)
+ @qml.qnode(dev, diff_method="parameter-shift", gradient_kwargs={"broadcast": broadcast})
def reference_qnode(x):
qml.RY(x, wires=0)
return qml.expval(qml.PauliZ(wires=0))
diff --git a/tests/resource/test_specs.py b/tests/resource/test_specs.py
index a02b35ef97b..5a5764e7153 100644
--- a/tests/resource/test_specs.py
+++ b/tests/resource/test_specs.py
@@ -33,10 +33,15 @@ class TestSpecsTransform:
"""Tests for the transform specs using the QNode"""
def sample_circuit(self):
+
@qml.transforms.merge_rotations
@qml.transforms.undo_swaps
@qml.transforms.cancel_inverses
- @qml.qnode(qml.device("default.qubit"), diff_method="parameter-shift", shifts=pnp.pi / 4)
+ @qml.qnode(
+ qml.device("default.qubit"),
+ diff_method="parameter-shift",
+ gradient_kwargs={"shifts": pnp.pi / 4},
+ )
def circuit(x):
qml.RandomLayers(qml.numpy.array([[1.0, 2.0]]), wires=(0, 1))
qml.RX(x, wires=0)
@@ -222,7 +227,11 @@ def test_splitting_transforms(self):
@qml.transforms.split_non_commuting
@qml.transforms.merge_rotations
- @qml.qnode(qml.device("default.qubit"), diff_method="parameter-shift", shifts=pnp.pi / 4)
+ @qml.qnode(
+ qml.device("default.qubit"),
+ diff_method="parameter-shift",
+ gradient_kwargs={"shifts": pnp.pi / 4},
+ )
def circuit(x):
qml.RandomLayers(qml.numpy.array([[1.0, 2.0]]), wires=(0, 1))
qml.RX(x, wires=0)
diff --git a/tests/templates/test_state_preparations/test_mottonen_state_prep.py b/tests/templates/test_state_preparations/test_mottonen_state_prep.py
index 885def86e60..a63a2d20129 100644
--- a/tests/templates/test_state_preparations/test_mottonen_state_prep.py
+++ b/tests/templates/test_state_preparations/test_mottonen_state_prep.py
@@ -431,7 +431,7 @@ def circuit(coeffs):
qml.MottonenStatePreparation(coeffs, wires=[0, 1])
return qml.probs(wires=[0, 1])
- circuit_fd = qml.QNode(circuit, dev, diff_method="finite-diff", h=0.05)
+ circuit_fd = qml.QNode(circuit, dev, diff_method="finite-diff", gradient_kwargs={"h": 0.05})
circuit_ps = qml.QNode(circuit, dev, diff_method="parameter-shift")
circuit_exact = qml.QNode(circuit, dev_no_shots)
diff --git a/tests/test_qnode.py b/tests/test_qnode.py
index c60ae352e4b..ec141af64e7 100644
--- a/tests/test_qnode.py
+++ b/tests/test_qnode.py
@@ -36,6 +36,17 @@ def dummyfunc():
return None
+def test_additional_kwargs_is_deprecated():
+ """Test that passing gradient_kwargs as additional kwargs raises a deprecation warning."""
+ dev = qml.device("default.qubit", wires=1)
+
+ with pytest.warns(
+ qml.PennyLaneDeprecationWarning,
+ match=r"Specifying gradient keyword arguments \[\'atol\'\] is deprecated",
+ ):
+ QNode(dummyfunc, dev, atol=1)
+
+
# pylint: disable=unused-argument
class CustomDevice(qml.devices.Device):
"""A null device that just returns 0."""
@@ -145,24 +156,21 @@ def test_update_gradient_kwargs(self):
"""Test that gradient kwargs are updated correctly"""
dev = qml.device("default.qubit")
- @qml.qnode(dev, atol=1)
+ @qml.qnode(dev, gradient_kwargs={"atol": 1})
def circuit(x):
qml.RZ(x, wires=0)
qml.CNOT(wires=[0, 1])
qml.RY(x, wires=1)
return qml.expval(qml.PauliZ(1))
- assert len(circuit.gradient_kwargs) == 1
- assert list(circuit.gradient_kwargs.keys()) == ["atol"]
+ assert set(circuit.gradient_kwargs.keys()) == {"atol"}
- new_atol_circuit = circuit.update(atol=2)
- assert len(new_atol_circuit.gradient_kwargs) == 1
- assert list(new_atol_circuit.gradient_kwargs.keys()) == ["atol"]
+ new_atol_circuit = circuit.update(gradient_kwargs={"atol": 2})
+ assert set(new_atol_circuit.gradient_kwargs.keys()) == {"atol"}
assert new_atol_circuit.gradient_kwargs["atol"] == 2
- new_kwarg_circuit = circuit.update(h=1)
- assert len(new_kwarg_circuit.gradient_kwargs) == 2
- assert list(new_kwarg_circuit.gradient_kwargs.keys()) == ["atol", "h"]
+ new_kwarg_circuit = circuit.update(gradient_kwargs={"h": 1})
+ assert set(new_kwarg_circuit.gradient_kwargs.keys()) == {"atol", "h"}
assert new_kwarg_circuit.gradient_kwargs["atol"] == 1
assert new_kwarg_circuit.gradient_kwargs["h"] == 1
@@ -170,7 +178,7 @@ def circuit(x):
UserWarning,
match="Received gradient_kwarg blah, which is not included in the list of standard qnode gradient kwargs.",
):
- circuit.update(blah=1)
+ circuit.update(gradient_kwargs={"blah": 1})
def test_update_multiple_arguments(self):
"""Test that multiple parameters can be updated at once."""
@@ -194,7 +202,7 @@ def test_update_transform_program(self):
dev = qml.device("default.qubit", wires=2)
@qml.transforms.combine_global_phases
- @qml.qnode(dev, atol=1)
+ @qml.qnode(dev)
def circuit(x):
qml.RZ(x, wires=0)
qml.GlobalPhase(phi=1)
@@ -248,7 +256,7 @@ def circuit(return_type):
def test_expansion_strategy_error(self):
"""Test that an error is raised if expansion_strategy is passed to the qnode."""
- with pytest.raises(ValueError, match=r"'expansion_strategy' is no longer"):
+ with pytest.raises(ValueError, match="'expansion_strategy' is no longer"):
@qml.qnode(qml.device("default.qubit"), expansion_strategy="device")
def _():
@@ -453,7 +461,7 @@ def test_unrecognized_kwargs_raise_warning(self):
with warnings.catch_warnings(record=True) as w:
- @qml.qnode(dev, random_kwarg=qml.gradients.finite_diff)
+ @qml.qnode(dev, gradient_kwargs={"random_kwarg": qml.gradients.finite_diff})
def circuit(params):
qml.RX(params[0], wires=0)
return qml.expval(qml.PauliZ(0)), qml.var(qml.PauliZ(0))
@@ -846,7 +854,7 @@ def test_single_expectation_value_with_argnum_one(self, diff_method, tol):
y = pnp.array(-0.654, requires_grad=True)
@qnode(
- dev, diff_method=diff_method, argnum=[1]
+ dev, diff_method=diff_method, gradient_kwargs={"argnum": [1]}
) # <--- we only choose one trainable parameter
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -1320,11 +1328,11 @@ def ansatz0():
return qml.expval(qml.X(0))
with pytest.raises(ValueError, match="'shots' is not a valid gradient_kwarg."):
- qml.QNode(ansatz0, dev, shots=100)
+ qml.QNode(ansatz0, dev, gradient_kwargs={"shots": 100})
with pytest.raises(ValueError, match="'shots' is not a valid gradient_kwarg."):
- @qml.qnode(dev, shots=100)
+ @qml.qnode(dev, gradient_kwargs={"shots": 100})
def _():
return qml.expval(qml.X(0))
diff --git a/tests/test_qnode_legacy.py b/tests/test_qnode_legacy.py
index 26c46687934..5a8c63c7d22 100644
--- a/tests/test_qnode_legacy.py
+++ b/tests/test_qnode_legacy.py
@@ -201,7 +201,7 @@ def test_unrecognized_kwargs_raise_warning(self):
with warnings.catch_warnings(record=True) as w:
- @qml.qnode(dev, random_kwarg=qml.gradients.finite_diff)
+ @qml.qnode(dev, gradient_kwargs={"random_kwarg": qml.gradients.finite_diff})
def circuit(params):
qml.RX(params[0], wires=0)
return qml.expval(qml.PauliZ(0)), qml.var(qml.PauliZ(0))
@@ -627,7 +627,7 @@ def test_single_expectation_value_with_argnum_one(self, diff_method, tol):
y = pnp.array(-0.654, requires_grad=True)
@qnode(
- dev, diff_method=diff_method, argnum=[1]
+ dev, diff_method=diff_method, gradient_kwargs={"argnum": [1]}
) # <--- we only choose one trainable parameter
def circuit(x, y):
qml.RX(x, wires=[0])
diff --git a/tests/transforms/test_add_noise.py b/tests/transforms/test_add_noise.py
index 779dcf91e36..3beab611105 100644
--- a/tests/transforms/test_add_noise.py
+++ b/tests/transforms/test_add_noise.py
@@ -414,7 +414,7 @@ def test_add_noise_level(self, level1, level2):
@qml.transforms.undo_swaps
@qml.transforms.merge_rotations
@qml.transforms.cancel_inverses
- @qml.qnode(dev, diff_method="parameter-shift", shifts=np.pi / 4)
+ @qml.qnode(dev, diff_method="parameter-shift", gradient_kwargs={"shifts": np.pi / 4})
def f(w, x, y, z):
qml.RX(w, wires=0)
qml.RY(x, wires=1)
@@ -447,7 +447,7 @@ def test_add_noise_level_with_final(self):
@qml.transforms.undo_swaps
@qml.transforms.merge_rotations
@qml.transforms.cancel_inverses
- @qml.qnode(dev, diff_method="parameter-shift", shifts=np.pi / 4)
+ @qml.qnode(dev, diff_method="parameter-shift", gradient_kwargs={"shifts": np.pi / 4})
def f(w, x, y, z):
qml.RX(w, wires=0)
qml.RY(x, wires=1)
diff --git a/tests/workflow/interfaces/qnode/test_autograd_qnode.py b/tests/workflow/interfaces/qnode/test_autograd_qnode.py
index ac30592926b..18e5f70cb83 100644
--- a/tests/workflow/interfaces/qnode/test_autograd_qnode.py
+++ b/tests/workflow/interfaces/qnode/test_autograd_qnode.py
@@ -137,14 +137,15 @@ def test_jacobian(self, interface, dev, diff_method, grad_on_execution, tol, dev
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
a = np.array(0.1, requires_grad=True)
b = np.array(0.2, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=1)
@@ -183,14 +184,15 @@ def test_jacobian_no_evaluate(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
a = np.array(0.1, requires_grad=True)
b = np.array(0.2, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=1)
@@ -222,13 +224,14 @@ def test_jacobian_options(self, interface, dev, diff_method, grad_on_execution,
a = np.array([0.1, 0.2], requires_grad=True)
+ gradient_kwargs = {"h": 1e-8, "approx_order": 2}
+
@qnode(
dev,
interface=interface,
- h=1e-8,
- order=2,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a):
qml.RY(a[0], wires=0)
@@ -408,10 +411,10 @@ def test_differentiable_expand(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
)
-
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 10
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 10
tol = TOL_FOR_SPSA
# pylint: disable=too-few-public-methods
@@ -429,7 +432,7 @@ def decomposition(self):
a = np.array(0.1, requires_grad=False)
p = np.array([0.1, 0.2, 0.3], requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, p):
qml.RX(a, wires=0)
U3(p[0], p[1], p[2], wires=0)
@@ -555,15 +558,15 @@ def test_probability_differentiation(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
)
-
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
x = np.array(0.543, requires_grad=True)
y = np.array(-0.654, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -593,14 +596,15 @@ def test_multiple_probability_differentiation(
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
x = np.array(0.543, requires_grad=True)
y = np.array(-0.654, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -660,14 +664,15 @@ def test_ragged_differentiation(
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
x = np.array(0.543, requires_grad=True)
y = np.array(-0.654, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -711,8 +716,9 @@ def test_ragged_differentiation_variance(
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
elif diff_method == "hadamard":
pytest.skip("Hadamard gradient does not support variances.")
@@ -720,7 +726,7 @@ def test_ragged_differentiation_variance(
x = np.array(0.543, requires_grad=True)
y = np.array(-0.654, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -826,12 +832,13 @@ def test_chained_gradient_value(
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
dev1 = qml.device("default.qubit")
- @qnode(dev1, **kwargs)
+ @qnode(dev1, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit1(a, b, c):
qml.RX(a, wires=0)
qml.RX(b, wires=1)
@@ -1350,8 +1357,9 @@ def test_projector(
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
elif diff_method == "hadamard":
pytest.skip("Hadamard gradient does not support variances.")
@@ -1359,7 +1367,7 @@ def test_projector(
P = np.array(state, requires_grad=False)
x, y = np.array([0.765, -0.654], requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=0)
qml.RY(y, wires=1)
@@ -1498,16 +1506,17 @@ def test_hamiltonian_expansion_analytic(
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method in ["adjoint", "hadamard"]:
pytest.skip("The diff method requested does not yet support Hamiltonians")
elif diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 10
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 10
tol = TOL_FOR_SPSA
obs = [qml.PauliX(0), qml.PauliX(0) @ qml.PauliZ(1), qml.PauliZ(0) @ qml.PauliZ(1)]
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(data, weights, coeffs):
weights = weights.reshape(1, -1)
qml.templates.AngleEmbedding(data, wires=[0, 1])
@@ -1584,7 +1593,7 @@ def test_hamiltonian_finite_shots(
grad_on_execution=grad_on_execution,
max_diff=max_diff,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(data, weights, coeffs):
weights = weights.reshape(1, -1)
diff --git a/tests/workflow/interfaces/qnode/test_autograd_qnode_shot_vector.py b/tests/workflow/interfaces/qnode/test_autograd_qnode_shot_vector.py
index 87e534fdb52..54072ae442e 100644
--- a/tests/workflow/interfaces/qnode/test_autograd_qnode_shot_vector.py
+++ b/tests/workflow/interfaces/qnode/test_autograd_qnode_shot_vector.py
@@ -52,7 +52,7 @@ def test_jac_single_measurement_param(
"""For one measurement and one param, the gradient is a float."""
dev = qml.device(dev_name, wires=1, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -74,7 +74,7 @@ def test_jac_single_measurement_multiple_param(
"""For one measurement and multiple param, the gradient is a tuple of arrays."""
dev = qml.device(dev_name, wires=1, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -100,7 +100,7 @@ def test_jacobian_single_measurement_multiple_param_array(
"""For one measurement and multiple param as a single array params, the gradient is an array."""
dev = qml.device(dev_name, wires=1, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -123,7 +123,7 @@ def test_jacobian_single_measurement_param_probs(
dimension"""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -146,7 +146,7 @@ def test_jacobian_single_measurement_probs_multiple_param(
the correct dimension"""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -173,7 +173,7 @@ def test_jacobian_single_measurement_probs_multiple_param_single_array(
the correct dimension"""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -198,7 +198,7 @@ def test_jacobian_expval_expval_multiple_params(
par_0 = np.array(0.1)
par_1 = np.array(0.2)
- @qnode(dev, diff_method=diff_method, max_diff=1, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, max_diff=1, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -223,7 +223,7 @@ def test_jacobian_expval_expval_multiple_params_array(
"""The jacobian of multiple measurements with a multiple params array return a single array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -250,7 +250,7 @@ def test_jacobian_var_var_multiple_params(
par_0 = np.array(0.1)
par_1 = np.array(0.2)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -275,7 +275,7 @@ def test_jacobian_var_var_multiple_params_array(
"""The jacobian of multiple measurements with a multiple params array return a single array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -299,7 +299,7 @@ def test_jacobian_multiple_measurement_single_param(
"""The jacobian of multiple measurements with a single params return an array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -322,7 +322,7 @@ def test_jacobian_multiple_measurement_multiple_param(
"""The jacobian of multiple measurements with a multiple params return a tuple of arrays."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -349,7 +349,7 @@ def test_jacobian_multiple_measurement_multiple_param_array(
"""The jacobian of multiple measurements with a multiple params array return a single array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -382,7 +382,7 @@ def test_hessian_expval_multiple_params(
par_0 = np.array(0.1)
par_1 = np.array(0.2)
- @qnode(dev, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, max_diff=2, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -412,7 +412,7 @@ def test_hessian_expval_multiple_param_array(
params = np.array([0.1, 0.2])
- @qnode(dev, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, max_diff=2, gradient_kwargs=gradient_kwargs)
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -440,7 +440,7 @@ def test_hessian_var_multiple_params(
par_0 = np.array(0.1)
par_1 = np.array(0.2)
- @qnode(dev, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, max_diff=2, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -470,7 +470,7 @@ def test_hessian_var_multiple_param_array(
params = np.array([0.1, 0.2])
- @qnode(dev, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, max_diff=2, gradient_kwargs=gradient_kwargs)
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -500,7 +500,7 @@ def test_hessian_probs_expval_multiple_params(
par_0 = np.array(0.1)
par_1 = np.array(0.2)
- @qnode(dev, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, max_diff=2, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -533,7 +533,7 @@ def test_hessian_expval_probs_multiple_param_array(
params = np.array([0.1, 0.2])
- @qnode(dev, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, max_diff=2, gradient_kwargs=gradient_kwargs)
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -571,7 +571,7 @@ def test_single_expectation_value(
x = np.array(0.543)
y = np.array(-0.654)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -604,7 +604,7 @@ def test_prob_expectation_values(
x = np.array(0.543)
y = np.array(-0.654)
- @qnode(dev, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
diff --git a/tests/workflow/interfaces/qnode/test_jax_jit_qnode.py b/tests/workflow/interfaces/qnode/test_jax_jit_qnode.py
index 862806999c6..02a586be118 100644
--- a/tests/workflow/interfaces/qnode/test_jax_jit_qnode.py
+++ b/tests/workflow/interfaces/qnode/test_jax_jit_qnode.py
@@ -230,7 +230,7 @@ def decomposition(self):
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, p):
qml.RX(a, wires=0)
@@ -266,14 +266,15 @@ def test_jacobian_options(
a = np.array([0.1, 0.2], requires_grad=True)
+ gradient_kwargs = {"h": 1e-8, "approx_order": 2}
+
@qnode(
get_device(dev_name, wires=1, seed=seed),
interface=interface,
diff_method="finite-diff",
- h=1e-8,
- approx_order=2,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a):
qml.RY(a[0], wires=0)
@@ -323,7 +324,7 @@ def test_diff_expval_expval(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, b):
qml.RY(a, wires=0)
@@ -389,7 +390,7 @@ def test_jacobian_no_evaluate(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, b):
qml.RY(a, wires=0)
@@ -456,7 +457,7 @@ def test_diff_single_probs(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -512,7 +513,7 @@ def test_diff_multi_probs(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -601,7 +602,7 @@ def test_diff_expval_probs(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -679,7 +680,7 @@ def test_diff_expval_probs_sub_argnums(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **kwargs,
+ gradient_kwargs=kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -740,7 +741,7 @@ def test_diff_var_probs(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -1130,7 +1131,7 @@ def test_second_derivative(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -1183,7 +1184,7 @@ def test_hessian(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -1237,7 +1238,7 @@ def test_hessian_vector_valued(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -1300,7 +1301,7 @@ def test_hessian_vector_valued_postprocessing(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RX(x[0], wires=0)
@@ -1366,7 +1367,7 @@ def test_hessian_vector_valued_separate_args(
grad_on_execution=grad_on_execution,
max_diff=2,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, b):
qml.RY(a, wires=0)
@@ -1478,7 +1479,7 @@ def test_projector(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=0)
@@ -1593,7 +1594,7 @@ def test_hamiltonian_expansion_analytic(
grad_on_execution=grad_on_execution,
max_diff=max_diff,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(data, weights, coeffs):
weights = weights.reshape(1, -1)
@@ -1663,7 +1664,7 @@ def test_hamiltonian_finite_shots(
grad_on_execution=grad_on_execution,
max_diff=max_diff,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(data, weights, coeffs):
weights = weights.reshape(1, -1)
@@ -1862,7 +1863,7 @@ def test_gradient(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -2013,7 +2014,7 @@ def test_gradient_scalar_cost_vector_valued_qnode(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -3062,7 +3063,7 @@ def test_single_measurement(
grad_on_execution=grad_on_execution,
cache=False,
device_vjp=device_vjp,
- **kwargs,
+ gradient_kwargs=kwargs,
)
def circuit(a, b):
qml.RY(a, wires=0)
@@ -3123,7 +3124,7 @@ def test_multi_measurements(
diff_method=diff_method,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **kwargs,
+ gradient_kwargs=kwargs,
)
def circuit(a, b):
qml.RY(a, wires=0)
diff --git a/tests/workflow/interfaces/qnode/test_jax_qnode.py b/tests/workflow/interfaces/qnode/test_jax_qnode.py
index ae1cb53a398..ae7ea130193 100644
--- a/tests/workflow/interfaces/qnode/test_jax_qnode.py
+++ b/tests/workflow/interfaces/qnode/test_jax_qnode.py
@@ -188,10 +188,10 @@ def test_differentiable_expand(
"grad_on_execution": grad_on_execution,
"device_vjp": device_vjp,
}
-
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 10
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 10
tol = TOL_FOR_SPSA
class U3(qml.U3): # pylint:disable=too-few-public-methods
@@ -206,7 +206,7 @@ def decomposition(self):
a = jax.numpy.array(0.1)
p = jax.numpy.array([0.1, 0.2, 0.3])
- @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, p):
qml.RX(a, wires=0)
U3(p[0], p[1], p[2], wires=0)
@@ -240,12 +240,13 @@ def test_jacobian_options(
a = jax.numpy.array([0.1, 0.2])
+ gradient_kwargs = {"h": 1e-8, "approx_order": 2}
+
@qnode(
get_device(dev_name, wires=1, seed=seed),
interface=interface,
diff_method="finite-diff",
- h=1e-8,
- approx_order=2,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a):
qml.RY(a[0], wires=0)
@@ -273,9 +274,9 @@ def test_diff_expval_expval(
"grad_on_execution": grad_on_execution,
"device_vjp": device_vjp,
}
-
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
if "lightning" in dev_name:
pytest.xfail("lightning device_vjp not compatible with jax.jacobian.")
@@ -283,7 +284,7 @@ def test_diff_expval_expval(
a = jax.numpy.array(0.1)
b = jax.numpy.array(0.2)
- @qnode(get_device(dev_name, wires=2, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=2, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=1)
@@ -334,14 +335,15 @@ def test_jacobian_no_evaluate(
if "lightning" in dev_name:
pytest.xfail("lightning device_vjp not compatible with jax.jacobian.")
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
a = jax.numpy.array(0.1)
b = jax.numpy.array(0.2)
- @qnode(get_device(dev_name, wires=2, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=2, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=1)
@@ -387,8 +389,9 @@ def test_diff_single_probs(
"grad_on_execution": grad_on_execution,
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
if "lightning" in dev_name:
pytest.xfail("lightning device_vjp not compatible with jax.jacobian.")
@@ -396,7 +399,7 @@ def test_diff_single_probs(
x = jax.numpy.array(0.543)
y = jax.numpy.array(-0.654)
- @qnode(get_device(dev_name, wires=2, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=2, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -436,8 +439,9 @@ def test_diff_multi_probs(
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
if "lightning" in dev_name:
pytest.xfail("lightning device_vjp not compatible with jax.jacobian.")
@@ -445,7 +449,7 @@ def test_diff_multi_probs(
x = jax.numpy.array(0.543)
y = jax.numpy.array(-0.654)
- @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -517,8 +521,9 @@ def test_diff_expval_probs(
"grad_on_execution": grad_on_execution,
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
if "lightning" in dev_name:
pytest.xfail("lightning device_vjp not compatible with jax.jacobian.")
@@ -526,7 +531,7 @@ def test_diff_expval_probs(
x = jax.numpy.array(0.543)
y = jax.numpy.array(-0.654)
- @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -599,7 +604,7 @@ def test_diff_expval_probs_sub_argnums(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **kwargs,
+ gradient_kwargs=kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -646,18 +651,19 @@ def test_diff_var_probs(
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method == "hadamard":
pytest.skip("Hadamard does not support var")
if "lightning" in dev_name:
pytest.xfail("lightning device_vjp not compatible with jax.jacobian.")
elif diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
x = jax.numpy.array(0.543)
y = jax.numpy.array(-0.654)
- @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=1, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -968,13 +974,14 @@ def test_second_derivative(
"max_diff": 2,
}
+ gradient_kwargs = {}
if diff_method == "adjoint":
pytest.skip("Adjoint does not second derivative.")
elif diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
- @qnode(get_device(dev_name, wires=0, seed=seed), **kwargs)
+ @qnode(get_device(dev_name, wires=0, seed=seed), **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x):
qml.RY(x[0], wires=0)
qml.RX(x[1], wires=0)
@@ -1024,7 +1031,7 @@ def test_hessian(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -1079,7 +1086,7 @@ def test_hessian_vector_valued(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -1142,7 +1149,7 @@ def test_hessian_vector_valued_postprocessing(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x):
qml.RX(x[0], wires=0)
@@ -1208,7 +1215,7 @@ def test_hessian_vector_valued_separate_args(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, b):
qml.RY(a, wires=0)
@@ -1316,7 +1323,7 @@ def test_projector(
interface=interface,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=0)
@@ -1425,7 +1432,7 @@ def test_split_non_commuting_analytic(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=max_diff,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(data, weights, coeffs):
weights = weights.reshape(1, -1)
@@ -1513,7 +1520,7 @@ def test_hamiltonian_finite_shots(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
max_diff=max_diff,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(data, weights, coeffs):
weights = weights.reshape(1, -1)
diff --git a/tests/workflow/interfaces/qnode/test_jax_qnode_shot_vector.py b/tests/workflow/interfaces/qnode/test_jax_qnode_shot_vector.py
index 697a1e90223..210ba601586 100644
--- a/tests/workflow/interfaces/qnode/test_jax_qnode_shot_vector.py
+++ b/tests/workflow/interfaces/qnode/test_jax_qnode_shot_vector.py
@@ -60,7 +60,7 @@ def test_jac_single_measurement_param(
"""For one measurement and one param, the gradient is a float."""
dev = qml.device(dev_name, wires=1, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -86,7 +86,7 @@ def test_jac_single_measurement_multiple_param(
"""For one measurement and multiple param, the gradient is a tuple of arrays."""
dev = qml.device(dev_name, wires=1, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -115,7 +115,7 @@ def test_jacobian_single_measurement_multiple_param_array(
"""For one measurement and multiple param as a single array params, the gradient is an array."""
dev = qml.device(dev_name, wires=1, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -141,7 +141,7 @@ def test_jacobian_single_measurement_param_probs(
dimension"""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -167,7 +167,7 @@ def test_jacobian_single_measurement_probs_multiple_param(
the correct dimension"""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -199,7 +199,7 @@ def test_jacobian_single_measurement_probs_multiple_param_single_array(
the correct dimension"""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -227,7 +227,13 @@ def test_jacobian_expval_expval_multiple_params(
par_0 = jax.numpy.array(0.1)
par_1 = jax.numpy.array(0.2)
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=1, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=1,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -264,7 +270,7 @@ def test_jacobian_expval_expval_multiple_params_array(
"""The jacobian of multiple measurements with a multiple params array return a single array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -298,7 +304,7 @@ def test_jacobian_var_var_multiple_params(
par_0 = jax.numpy.array(0.1)
par_1 = jax.numpy.array(0.2)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -336,7 +342,7 @@ def test_jacobian_var_var_multiple_params_array(
"""The jacobian of multiple measurements with a multiple params array return a single array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -367,7 +373,7 @@ def test_jacobian_multiple_measurement_single_param(
"""The jacobian of multiple measurements with a single params return an array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -398,7 +404,7 @@ def test_jacobian_multiple_measurement_multiple_param(
"""The jacobian of multiple measurements with a multiple params return a tuple of arrays."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -438,7 +444,7 @@ def test_jacobian_multiple_measurement_multiple_param_array(
"""The jacobian of multiple measurements with a multiple params array return a single array."""
dev = qml.device(dev_name, wires=2, shots=shots)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -471,7 +477,13 @@ def test_hessian_expval_multiple_params(
par_0 = jax.numpy.array(0.1)
par_1 = jax.numpy.array(0.2)
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -508,7 +520,13 @@ def test_hessian_expval_multiple_param_array(
params = jax.numpy.array([0.1, 0.2])
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -534,7 +552,13 @@ def test_hessian_var_multiple_params(
par_0 = jax.numpy.array(0.1)
par_1 = jax.numpy.array(0.2)
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -571,7 +595,13 @@ def test_hessian_var_multiple_param_array(
params = jax.numpy.array([0.1, 0.2])
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -597,7 +627,13 @@ def test_hessian_probs_expval_multiple_params(
par_0 = jax.numpy.array(0.1)
par_1 = jax.numpy.array(0.2)
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -655,7 +691,13 @@ def test_hessian_expval_probs_multiple_param_array(
params = jax.numpy.array([0.1, 0.2])
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -687,7 +729,13 @@ def test_hessian_probs_var_multiple_params(
par_0 = qml.numpy.array(0.1)
par_1 = qml.numpy.array(0.2)
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -742,7 +790,13 @@ def test_hessian_var_probs_multiple_param_array(
params = jax.numpy.array([0.1, 0.2])
- @qnode(dev, interface=interface, diff_method=diff_method, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ interface=interface,
+ diff_method=diff_method,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -792,7 +846,7 @@ def test_single_expectation_value(
x = jax.numpy.array(0.543)
y = jax.numpy.array(-0.654)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -827,7 +881,7 @@ def test_prob_expectation_values(
x = jax.numpy.array(0.543)
y = jax.numpy.array(-0.654)
- @qnode(dev, interface=interface, diff_method=diff_method, **gradient_kwargs)
+ @qnode(dev, interface=interface, diff_method=diff_method, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
diff --git a/tests/workflow/interfaces/qnode/test_tensorflow_autograph_qnode_shot_vector.py b/tests/workflow/interfaces/qnode/test_tensorflow_autograph_qnode_shot_vector.py
index f24eda4b382..6a20f264ec6 100644
--- a/tests/workflow/interfaces/qnode/test_tensorflow_autograph_qnode_shot_vector.py
+++ b/tests/workflow/interfaces/qnode/test_tensorflow_autograph_qnode_shot_vector.py
@@ -73,7 +73,7 @@ def test_jac_single_measurement_param(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, **_):
qml.RY(a, wires=0)
@@ -101,7 +101,7 @@ def test_jac_single_measurement_multiple_param(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, b, **_):
qml.RY(a, wires=0)
@@ -133,7 +133,7 @@ def test_jacobian_single_measurement_multiple_param_array(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, **_):
qml.RY(a[0], wires=0)
@@ -162,7 +162,7 @@ def test_jacobian_single_measurement_param_probs(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, **_):
qml.RY(a, wires=0)
@@ -191,7 +191,7 @@ def test_jacobian_single_measurement_probs_multiple_param(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, b, **_):
qml.RY(a, wires=0)
@@ -224,7 +224,7 @@ def test_jacobian_single_measurement_probs_multiple_param_single_array(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, **_):
qml.RY(a[0], wires=0)
@@ -255,7 +255,7 @@ def test_jacobian_expval_expval_multiple_params(
diff_method=diff_method,
interface=interface,
max_diff=1,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y, **_):
qml.RX(x, wires=[0])
@@ -285,7 +285,7 @@ def test_jacobian_expval_expval_multiple_params_array(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, **_):
qml.RY(a[0], wires=0)
@@ -314,7 +314,7 @@ def test_jacobian_multiple_measurement_single_param(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, **_):
qml.RY(a, wires=0)
@@ -342,7 +342,7 @@ def test_jacobian_multiple_measurement_multiple_param(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, b, **_):
qml.RY(a, wires=0)
@@ -374,7 +374,7 @@ def test_jacobian_multiple_measurement_multiple_param_array(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a, **_):
qml.RY(a[0], wires=0)
@@ -421,7 +421,7 @@ def test_hessian_expval_multiple_params(
diff_method=diff_method,
interface=interface,
max_diff=2,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y, **_):
qml.RX(x, wires=[0])
@@ -471,7 +471,7 @@ def test_single_expectation_value(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y, **_):
qml.RX(x, wires=[0])
@@ -509,7 +509,7 @@ def test_prob_expectation_values(
qml.device(dev_name, seed=seed),
diff_method=diff_method,
interface=interface,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y, **_):
qml.RX(x, wires=[0])
diff --git a/tests/workflow/interfaces/qnode/test_tensorflow_qnode.py b/tests/workflow/interfaces/qnode/test_tensorflow_qnode.py
index 85a39cc588f..79f19bd2f4d 100644
--- a/tests/workflow/interfaces/qnode/test_tensorflow_qnode.py
+++ b/tests/workflow/interfaces/qnode/test_tensorflow_qnode.py
@@ -158,6 +158,7 @@ def circuit(p1, p2=y, **kwargs):
def test_jacobian(self, dev, diff_method, grad_on_execution, device_vjp, tol, interface, seed):
"""Test jacobian calculation"""
+ gradient_kwargs = {}
kwargs = {
"diff_method": diff_method,
"grad_on_execution": grad_on_execution,
@@ -165,14 +166,14 @@ def test_jacobian(self, dev, diff_method, grad_on_execution, device_vjp, tol, in
"device_vjp": device_vjp,
}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
a = tf.Variable(0.1, dtype=tf.float64)
b = tf.Variable(0.2, dtype=tf.float64)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=1)
@@ -200,14 +201,15 @@ def test_jacobian_options(self, dev, diff_method, grad_on_execution, device_vjp,
a = tf.Variable([0.1, 0.2])
+ gradient_kwargs = {"approx_order": 2, "h": 1e-8}
+
@qnode(
dev,
interface=interface,
- h=1e-8,
- approx_order=2,
diff_method=diff_method,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a):
qml.RY(a[0], wires=0)
@@ -240,7 +242,7 @@ def test_changing_trainability(
diff_method=diff_method,
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
- **diff_kwargs,
+ gradient_kwargs=diff_kwargs,
)
def circuit(a, b):
qml.RY(a, wires=0)
@@ -370,6 +372,7 @@ def test_differentiable_expand(
):
"""Test that operation and nested tapes expansion
is differentiable"""
+ gradient_kwargs = {}
kwargs = {
"diff_method": diff_method,
"grad_on_execution": grad_on_execution,
@@ -377,8 +380,8 @@ def test_differentiable_expand(
"device_vjp": device_vjp,
}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
class U3(qml.U3):
@@ -393,7 +396,7 @@ def decomposition(self):
a = np.array(0.1)
p = tf.Variable([0.1, 0.2, 0.3], dtype=tf.float64)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, p):
qml.RX(a, wires=0)
U3(p[0], p[1], p[2], wires=0)
@@ -548,15 +551,16 @@ def test_probability_differentiation(
"interface": interface,
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
x = tf.Variable(0.543, dtype=tf.float64)
y = tf.Variable(-0.654, dtype=tf.float64)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -605,15 +609,16 @@ def test_ragged_differentiation(
"interface": interface,
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
x = tf.Variable(0.543, dtype=tf.float64)
y = tf.Variable(-0.654, dtype=tf.float64)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -943,13 +948,14 @@ def test_projector(
"interface": interface,
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method == "adjoint":
pytest.skip("adjoint supports either all expvals or all diagonal measurements.")
if diff_method == "hadamard":
pytest.skip("Variance not implemented yet.")
elif diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
if dev.name == "reference.qubit":
pytest.xfail("diagonalize_measurements do not support projectors (sc-72911)")
@@ -959,7 +965,7 @@ def test_projector(
x, y = 0.765, -0.654
weights = tf.Variable([x, y], dtype=tf.float64)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(weights):
qml.RX(weights[0], wires=0)
qml.RY(weights[1], wires=1)
@@ -1129,16 +1135,17 @@ def test_hamiltonian_expansion_analytic(
"interface": interface,
"device_vjp": device_vjp,
}
+ gradient_kwargs = {}
if diff_method in ["adjoint", "hadamard"]:
pytest.skip("The adjoint/hadamard method does not yet support Hamiltonians")
elif diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
obs = [qml.PauliX(0), qml.PauliX(0) @ qml.PauliZ(1), qml.PauliZ(0) @ qml.PauliZ(1)]
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(data, weights, coeffs):
weights = tf.reshape(weights, [1, -1])
qml.templates.AngleEmbedding(data, wires=[0, 1])
@@ -1211,7 +1218,7 @@ def test_hamiltonian_finite_shots(
max_diff=max_diff,
interface=interface,
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(data, weights, coeffs):
weights = tf.reshape(weights, [1, -1])
diff --git a/tests/workflow/interfaces/qnode/test_tensorflow_qnode_shot_vector.py b/tests/workflow/interfaces/qnode/test_tensorflow_qnode_shot_vector.py
index 037469657bc..fafd85e7e1e 100644
--- a/tests/workflow/interfaces/qnode/test_tensorflow_qnode_shot_vector.py
+++ b/tests/workflow/interfaces/qnode/test_tensorflow_qnode_shot_vector.py
@@ -70,7 +70,7 @@ def test_jac_single_measurement_param(
):
"""For one measurement and one param, the gradient is a float."""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -92,7 +92,7 @@ def test_jac_single_measurement_multiple_param(
):
"""For one measurement and multiple param, the gradient is a tuple of arrays."""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -118,7 +118,7 @@ def test_jacobian_single_measurement_multiple_param_array(
):
"""For one measurement and multiple param as a single array params, the gradient is an array."""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -141,7 +141,7 @@ def test_jacobian_single_measurement_param_probs(
"""For a multi dimensional measurement (probs), check that a single array is returned with the correct
dimension"""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -164,7 +164,7 @@ def test_jacobian_single_measurement_probs_multiple_param(
"""For a multi dimensional measurement (probs), check that a single tuple is returned containing arrays with
the correct dimension"""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -191,7 +191,7 @@ def test_jacobian_single_measurement_probs_multiple_param_single_array(
"""For a multi dimensional measurement (probs), check that a single tuple is returned containing arrays with
the correct dimension"""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -216,7 +216,13 @@ def test_jacobian_expval_expval_multiple_params(
par_0 = tf.Variable(0.1)
par_1 = tf.Variable(0.2)
- @qnode(dev, diff_method=diff_method, interface=interface, max_diff=1, **gradient_kwargs)
+ @qnode(
+ dev,
+ diff_method=diff_method,
+ interface=interface,
+ max_diff=1,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -240,7 +246,7 @@ def test_jacobian_expval_expval_multiple_params_array(
):
"""The jacobian of multiple measurements with a multiple params array return a single array."""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -263,7 +269,7 @@ def test_jacobian_multiple_measurement_single_param(
):
"""The jacobian of multiple measurements with a single params return an array."""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a, wires=0)
qml.RX(0.2, wires=0)
@@ -285,7 +291,7 @@ def test_jacobian_multiple_measurement_multiple_param(
):
"""The jacobian of multiple measurements with a multiple params return a tuple of arrays."""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=0)
@@ -311,7 +317,7 @@ def test_jacobian_multiple_measurement_multiple_param_array(
):
"""The jacobian of multiple measurements with a multiple params array return a single array."""
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(a):
qml.RY(a[0], wires=0)
qml.RX(a[1], wires=0)
@@ -343,7 +349,13 @@ def test_hessian_expval_multiple_params(
par_0 = tf.Variable(0.1, dtype=tf.float64)
par_1 = tf.Variable(0.2, dtype=tf.float64)
- @qnode(dev, diff_method=diff_method, interface=interface, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ diff_method=diff_method,
+ interface=interface,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -373,7 +385,13 @@ def test_hessian_expval_multiple_param_array(
params = tf.Variable([0.1, 0.2], dtype=tf.float64)
- @qnode(dev, diff_method=diff_method, interface=interface, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ diff_method=diff_method,
+ interface=interface,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -400,7 +418,13 @@ def test_hessian_probs_expval_multiple_params(
par_0 = tf.Variable(0.1, dtype=tf.float64)
par_1 = tf.Variable(0.2, dtype=tf.float64)
- @qnode(dev, diff_method=diff_method, interface=interface, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ diff_method=diff_method,
+ interface=interface,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -430,7 +454,13 @@ def test_hessian_expval_probs_multiple_param_array(
params = tf.Variable([0.1, 0.2], dtype=tf.float64)
- @qnode(dev, diff_method=diff_method, interface=interface, max_diff=2, **gradient_kwargs)
+ @qnode(
+ dev,
+ diff_method=diff_method,
+ interface=interface,
+ max_diff=2,
+ gradient_kwargs=gradient_kwargs,
+ )
def circuit(x):
qml.RX(x[0], wires=[0])
qml.RY(x[1], wires=[1])
@@ -467,7 +497,7 @@ def test_single_expectation_value(
x = tf.Variable(0.543, dtype=tf.float64)
y = tf.Variable(-0.654, dtype=tf.float64)
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -500,7 +530,7 @@ def test_prob_expectation_values(
x = tf.Variable(0.543, dtype=tf.float64)
y = tf.Variable(-0.654, dtype=tf.float64)
- @qnode(dev, diff_method=diff_method, interface=interface, **gradient_kwargs)
+ @qnode(dev, diff_method=diff_method, interface=interface, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
diff --git a/tests/workflow/interfaces/qnode/test_torch_qnode.py b/tests/workflow/interfaces/qnode/test_torch_qnode.py
index e9581898522..a2922a7ce62 100644
--- a/tests/workflow/interfaces/qnode/test_torch_qnode.py
+++ b/tests/workflow/interfaces/qnode/test_torch_qnode.py
@@ -173,9 +173,10 @@ def test_jacobian(self, interface, dev, diff_method, grad_on_execution, device_v
interface=interface,
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
a_val = 0.1
@@ -184,7 +185,7 @@ def test_jacobian(self, interface, dev, diff_method, grad_on_execution, device_v
a = torch.tensor(a_val, dtype=torch.float64, requires_grad=True)
b = torch.tensor(b_val, dtype=torch.float64, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, b):
qml.RY(a, wires=0)
qml.RX(b, wires=1)
@@ -276,14 +277,15 @@ def test_jacobian_options(
a = torch.tensor([0.1, 0.2], requires_grad=True)
+ gradient_kwargs = {"h": 1e-8, "approx_order": 2}
+
@qnode(
dev,
diff_method=diff_method,
grad_on_execution=grad_on_execution,
interface=interface,
- h=1e-8,
- approx_order=2,
device_vjp=device_vjp,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(a):
qml.RY(a[0], wires=0)
@@ -483,9 +485,10 @@ def test_differentiable_expand(
interface=interface,
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
class U3(qml.U3): # pylint:disable=too-few-public-methods
@@ -501,7 +504,7 @@ def decomposition(self):
p_val = [0.1, 0.2, 0.3]
p = torch.tensor(p_val, dtype=torch.float64, requires_grad=True)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(a, p):
qml.RX(a, wires=0)
U3(p[0], p[1], p[2], wires=0)
@@ -644,9 +647,9 @@ def test_probability_differentiation(
with prob and expval outputs"""
if "lightning" in getattr(dev, "name", "").lower():
pytest.xfail("lightning does not support measureing probabilities with adjoint.")
- kwargs = {}
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
tol = TOL_FOR_SPSA
x_val = 0.543
@@ -660,7 +663,7 @@ def test_probability_differentiation(
grad_on_execution=grad_on_execution,
interface=interface,
device_vjp=device_vjp,
- **kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(x, y):
qml.RX(x, wires=[0])
@@ -708,9 +711,10 @@ def test_ragged_differentiation(
interface=interface,
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
x_val = 0.543
@@ -718,7 +722,7 @@ def test_ragged_differentiation(
x = torch.tensor(x_val, requires_grad=True, dtype=torch.float64)
y = torch.tensor(y_val, requires_grad=True, dtype=torch.float64)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=[0])
qml.RY(y, wires=[1])
@@ -813,7 +817,7 @@ def test_hessian(self, interface, dev, diff_method, grad_on_execution, device_vj
max_diff=2,
interface=interface,
device_vjp=device_vjp,
- **options,
+ gradient_kwargs=options,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -866,7 +870,7 @@ def test_hessian_vector_valued(
max_diff=2,
interface=interface,
device_vjp=device_vjp,
- **options,
+ gradient_kwargs=options,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -928,7 +932,7 @@ def test_hessian_ragged(self, interface, dev, diff_method, grad_on_execution, de
max_diff=2,
interface=interface,
device_vjp=device_vjp,
- **options,
+ gradient_kwargs=options,
)
def circuit(x):
qml.RY(x[0], wires=0)
@@ -1003,7 +1007,7 @@ def test_hessian_vector_valued_postprocessing(
max_diff=2,
interface=interface,
device_vjp=device_vjp,
- **options,
+ gradient_kwargs=options,
)
def circuit(x):
qml.RX(x[0], wires=0)
@@ -1100,11 +1104,12 @@ def test_projector(
grad_on_execution=grad_on_execution,
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "adjoint":
pytest.skip("adjoint supports either all expvals or all diagonal measurements")
if diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
elif diff_method == "hadamard":
pytest.skip("Hadamard does not support variances.")
@@ -1116,7 +1121,7 @@ def test_projector(
x, y = 0.765, -0.654
weights = torch.tensor([x, y], requires_grad=True, dtype=torch.float64)
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(x, y):
qml.RX(x, wires=0)
qml.RY(y, wires=1)
@@ -1285,18 +1290,19 @@ def test_hamiltonian_expansion_analytic(
interface="torch",
device_vjp=device_vjp,
)
+ gradient_kwargs = {}
if diff_method == "adjoint":
pytest.skip("The adjoint method does not yet support Hamiltonians")
elif diff_method == "spsa":
- kwargs["sampler_rng"] = np.random.default_rng(seed)
- kwargs["num_directions"] = 20
+ gradient_kwargs["sampler_rng"] = np.random.default_rng(seed)
+ gradient_kwargs["num_directions"] = 20
tol = TOL_FOR_SPSA
elif diff_method == "hadamard":
pytest.skip("The hadamard method does not yet support Hamiltonians")
obs = [qml.PauliX(0), qml.PauliX(0) @ qml.PauliZ(1), qml.PauliZ(0) @ qml.PauliZ(1)]
- @qnode(dev, **kwargs)
+ @qnode(dev, **kwargs, gradient_kwargs=gradient_kwargs)
def circuit(data, weights, coeffs):
weights = torch.reshape(weights, [1, -1])
qml.templates.AngleEmbedding(data, wires=[0, 1])
@@ -1389,7 +1395,7 @@ def test_hamiltonian_finite_shots(
max_diff=max_diff,
interface="torch",
device_vjp=device_vjp,
- **gradient_kwargs,
+ gradient_kwargs=gradient_kwargs,
)
def circuit(data, weights, coeffs):
weights = torch.reshape(weights, [1, -1])
diff --git a/tests/workflow/test_construct_batch.py b/tests/workflow/test_construct_batch.py
index f11eaee459c..d4288da65d9 100644
--- a/tests/workflow/test_construct_batch.py
+++ b/tests/workflow/test_construct_batch.py
@@ -72,7 +72,7 @@ def test_get_transform_program_diff_method_transform(self):
@partial(qml.transforms.compile, num_passes=2)
@partial(qml.transforms.merge_rotations, atol=1e-5)
@qml.transforms.cancel_inverses
- @qml.qnode(dev, diff_method="parameter-shift", shifts=2)
+ @qml.qnode(dev, diff_method="parameter-shift", gradient_kwargs={"shifts": 2})
def circuit():
return qml.expval(qml.PauliZ(0))