diff --git a/.github/workflows/interface-unit-tests.yml b/.github/workflows/interface-unit-tests.yml
index 601e762fc92..70104146499 100644
--- a/.github/workflows/interface-unit-tests.yml
+++ b/.github/workflows/interface-unit-tests.yml
@@ -379,8 +379,7 @@ jobs:
# catalyst requires the latest version of pennylane that is about to be released.
# Installing catalyst after pennylane to make sure that the latest catalyst is used.
install_catalyst_nightly: true
- # using lightning master does not work for the tests with external libraries
- install_pennylane_lightning_master: false
+ install_pennylane_lightning_master: true
pytest_coverage_flags: ${{ inputs.pytest_coverage_flags }}
pytest_markers: external
additional_pip_packages: pyzx matplotlib stim quimb mitiq pennylane-qiskit ply
diff --git a/doc/development/deprecations.rst b/doc/development/deprecations.rst
index 967417ad71b..c91979963a9 100644
--- a/doc/development/deprecations.rst
+++ b/doc/development/deprecations.rst
@@ -9,6 +9,13 @@ deprecations are listed below.
Pending deprecations
--------------------
+* ``Device``, ``QubitDevice``, and ``QutritDevice`` will no longer be imported top level in v0.40. They instead
+ we be available as ``qml.devices.LegacyDevice``, ``qml.devices.QubitDevice``, and ``qml.devices.QutritDevice``
+ respectively.
+
+ - Deprecated top level access in v0.39
+ - Top level access removed in v0.40
+
* `QNode.gradient_fn` is deprecated. Please use `QNode.diff_method` instead. `QNode.get_gradient_fn` can also be used to
process the diff method.
diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md
index 7b9416d62c3..488fd8d37e8 100644
--- a/doc/releases/changelog-dev.md
+++ b/doc/releases/changelog-dev.md
@@ -86,6 +86,11 @@
Deprecations 👋
+* `Device`, `QubitDevice`, and `QutritDevice` will no longer be accessible via top-level import in v0.40.
+ They will still be accessible as `qml.devices.LegacyDevice`, `qml.devices.QubitDevice`, and `qml.devices.QutritDevice`
+ respectively.
+ [(#6238)](https://github.com/PennyLaneAI/pennylane/pull/6238/)
+
* `QNode.gradient_fn` is deprecated. Please use `QNode.diff_method` and `QNode.get_gradient_fn` instead.
[(#6244)](https://github.com/PennyLaneAI/pennylane/pull/6244)
diff --git a/pennylane/__init__.py b/pennylane/__init__.py
index 7f029461dea..3db66c953d2 100644
--- a/pennylane/__init__.py
+++ b/pennylane/__init__.py
@@ -16,8 +16,6 @@
PennyLane can be directly imported.
"""
-import numpy as _np
-
from pennylane.boolean_fn import BooleanFn
import pennylane.numpy
@@ -180,13 +178,30 @@ def __getattr__(name):
if name == "plugin_devices":
return pennylane.devices.device_constructor.plugin_devices
+ from warnings import warn # pylint: disable=import-outside-toplevel
+
if name == "QubitDevice":
+ warn(
+ "QubitDevice will no longer be accessible top level. Please access "
+ " the class as pennylane.devices.QubitDevice",
+ PennyLaneDeprecationWarning,
+ )
return pennylane.devices._qubit_device.QubitDevice # pylint:disable=protected-access
if name == "QutritDevice":
+ warn(
+ "QutritDevice will no longer be accessible top level. Please access "
+ " the class as pennylane.devices.QutritDevice",
+ PennyLaneDeprecationWarning,
+ )
return pennylane.devices._qutrit_device.QutritDevice # pylint:disable=protected-access
if name == "Device":
+ warn(
+ "Device will no longer be accessible top level. Please access "
+ " the class as pennylane.devices.LegacyDevice",
+ PennyLaneDeprecationWarning,
+ )
return pennylane.devices._legacy_device.Device # pylint:disable=protected-access
raise AttributeError(f"module 'pennylane' has no attribute '{name}'")
diff --git a/pennylane/devices/tests/conftest.py b/pennylane/devices/tests/conftest.py
index 5ea86da0aae..f462138c4d5 100755
--- a/pennylane/devices/tests/conftest.py
+++ b/pennylane/devices/tests/conftest.py
@@ -110,12 +110,6 @@ def validate_diff_method(device, diff_method, device_kwargs):
if diff_method == "backprop" and device_kwargs.get("shots") is not None:
pytest.skip(reason="test should only be run in analytic mode")
dev = device(1)
- if isinstance(dev, qml.Device):
- passthru_devices = dev.capabilities().get("passthru_devices")
- if diff_method == "backprop" and passthru_devices is None:
- pytest.skip(reason="device does not support backprop")
- return
-
config = qml.devices.ExecutionConfig(gradient_method=diff_method)
if not dev.supports_derivatives(execution_config=config):
pytest.skip(reason="device does not support diff_method")
@@ -141,12 +135,6 @@ def _device(wires):
f"plugin and all of its dependencies must be installed."
)
- if isinstance(dev, qml.Device):
- capabilities = dev.capabilities()
- if capabilities.get("model", None) != "qubit":
- # exit the tests if device based on cv model (currently not supported)
- pytest.exit("The device test suite currently only runs on qubit-based devices.")
-
return dev
return _device
diff --git a/pennylane/devices/tests/test_compare_default_qubit.py b/pennylane/devices/tests/test_compare_default_qubit.py
index 05b2b6509e8..75e91809e2a 100755
--- a/pennylane/devices/tests/test_compare_default_qubit.py
+++ b/pennylane/devices/tests/test_compare_default_qubit.py
@@ -38,9 +38,6 @@ def test_hermitian_expectation(self, device, tol, benchmark):
if dev.shots:
pytest.skip("Device is in non-analytical mode.")
- if isinstance(dev, qml.Device) and "Hermitian" not in dev.observables:
- pytest.skip("Device does not support the Hermitian observable.")
-
if dev.name == "default.qubit":
pytest.skip("Device is default.qubit.")
@@ -107,7 +104,7 @@ def test_projector_expectation(self, device, state, tol, benchmark):
if dev.shots:
pytest.skip("Device is in non-analytical mode.")
- if isinstance(dev, qml.Device) and "Projector" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Projector" not in dev.observables:
pytest.skip("Device does not support the Projector observable.")
if dev.name == "default.qubit":
diff --git a/pennylane/devices/tests/test_gates.py b/pennylane/devices/tests/test_gates.py
index b948f6962c4..7226e021994 100644
--- a/pennylane/devices/tests/test_gates.py
+++ b/pennylane/devices/tests/test_gates.py
@@ -358,7 +358,7 @@ def test_supported_gates_can_be_implemented(self, device_kwargs, operation):
device_kwargs["wires"] = 4 # maximum size of current gates
dev = qml.device(**device_kwargs)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if operation not in dev.operations:
pytest.skip("operation not supported.")
else:
@@ -395,7 +395,7 @@ def test_basis_state(self, device, basis_state, tol, skip_if):
"""Test basis state initialization."""
n_wires = 4
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
@qml.qnode(dev)
@@ -413,7 +413,7 @@ def test_state_prep(self, device, init_state, tol, skip_if):
"""Test StatePrep initialisation."""
n_wires = 1
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
rnd_state = init_state(n_wires)
@@ -433,7 +433,7 @@ def test_single_qubit_no_parameters(self, device, init_state, op, mat, tol, skip
"""Test PauliX application."""
n_wires = 1
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
rnd_state = init_state(n_wires)
@@ -457,7 +457,7 @@ def test_single_qubit_parameters(
"""Test single qubit gates taking a single scalar argument."""
n_wires = 1
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
rnd_state = init_state(n_wires)
@@ -477,7 +477,7 @@ def test_rotation(self, device, init_state, tol, skip_if, benchmark):
"""Test three axis rotation gate."""
n_wires = 1
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
rnd_state = init_state(n_wires)
@@ -501,7 +501,7 @@ def test_two_qubit_no_parameters(self, device, init_state, op, mat, tol, skip_if
"""Test two qubit gates."""
n_wires = 2
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
if not dev.supports_operation(op(wires=range(n_wires)).name):
pytest.skip("op not supported")
@@ -527,7 +527,7 @@ def test_two_qubit_parameters(
"""Test parametrized two qubit gates taking a single scalar argument."""
n_wires = 2
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
rnd_state = init_state(n_wires)
@@ -549,7 +549,7 @@ def test_qubit_unitary(self, device, init_state, mat, tol, skip_if, benchmark):
n_wires = int(np.log2(len(mat)))
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "QubitUnitary" not in dev.operations:
pytest.skip("Skipped because device does not support QubitUnitary.")
@@ -574,7 +574,7 @@ def test_special_unitary(self, device, init_state, theta_, tol, skip_if, benchma
n_wires = int(np.log(len(theta_) + 1) / np.log(4))
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "SpecialUnitary" not in dev.operations:
pytest.skip("Skipped because device does not support SpecialUnitary.")
@@ -603,7 +603,7 @@ def test_three_qubit_no_parameters(self, device, init_state, op, mat, tol, skip_
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"returns_probs": False})
rnd_state = init_state(n_wires)
diff --git a/pennylane/devices/tests/test_gates_with_expval.py b/pennylane/devices/tests/test_gates_with_expval.py
index 7239ab2bcd3..f2e7e8951d6 100755
--- a/pennylane/devices/tests/test_gates_with_expval.py
+++ b/pennylane/devices/tests/test_gates_with_expval.py
@@ -256,7 +256,7 @@ def test_supported_gate_two_wires_no_parameters(self, device, tol, name, expecte
dev = device(n_wires)
op = getattr(qml.ops, name)
- if isinstance(dev, qml.Device) and not dev.supports_operation(op):
+ if isinstance(dev, qml.devices.LegacyDevice) and not dev.supports_operation(op):
pytest.skip("operation not supported")
@qml.qnode(dev)
diff --git a/pennylane/devices/tests/test_measurements.py b/pennylane/devices/tests/test_measurements.py
index 2a81366ba36..cde18014781 100644
--- a/pennylane/devices/tests/test_measurements.py
+++ b/pennylane/devices/tests/test_measurements.py
@@ -116,7 +116,7 @@ def test_supported_observables_can_be_implemented(self, device_kwargs, observabl
if dev.shots and observable == "SparseHamiltonian":
pytest.skip("SparseHamiltonian only supported in analytic mode")
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
assert hasattr(dev, "observables")
if observable not in dev.observables:
pytest.skip("observable not supported")
@@ -313,7 +313,7 @@ def test_hermitian_expectation(self, device, tol):
n_wires = 2
dev = device(n_wires)
- if isinstance(dev, qml.Device) and "Hermitian" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
theta = 0.432
@@ -342,7 +342,7 @@ def test_projector_expectation(self, device, tol):
n_wires = 2
dev = device(n_wires)
- if isinstance(dev, qml.Device) and "Projector" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Projector" not in dev.observables:
pytest.skip("Skipped because device does not support the Projector observable.")
theta = 0.732
@@ -380,7 +380,7 @@ def test_multi_mode_hermitian_expectation(self, device, tol):
n_wires = 2
dev = device(n_wires)
- if isinstance(dev, qml.Device) and "Hermitian" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
theta = 0.432
@@ -426,7 +426,7 @@ def circuit():
def test_op_arithmetic_matches_default_qubit(self, o, device, tol):
"""Test that devices (which support the observable) match default.qubit results."""
dev = device(2)
- if isinstance(dev, qml.Device) and o.name not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and o.name not in dev.observables:
pytest.skip(f"Skipped because device does not support the {o.name} observable.")
def circuit():
@@ -448,7 +448,7 @@ def test_paulix_pauliy(self, device, tol, skip_if):
"""Test that a tensor product involving PauliX and PauliY works correctly"""
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
theta = 0.432
@@ -473,7 +473,7 @@ def test_pauliz_hadamard(self, device, tol, skip_if):
"""Test that a tensor product involving PauliZ and PauliY and hadamard works correctly"""
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
theta = 0.432
@@ -517,7 +517,7 @@ def circ(obs):
"""
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
@qml.qnode(dev)
@@ -545,7 +545,7 @@ def circ(wire_labels):
"""
dev = device(wires=3)
dev_custom_labels = device(wires=label_map)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
def circ(wire_labels):
@@ -567,7 +567,7 @@ def test_hermitian(self, device, tol, skip_if):
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
@@ -609,7 +609,7 @@ def test_projector(self, device, tol, skip_if):
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "Projector" not in dev.observables:
pytest.skip("Skipped because device does not support the Projector observable.")
@@ -661,7 +661,7 @@ def test_sparse_hamiltonian_expval(self, device, tol):
n_wires = 4
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "SparseHamiltonian" not in dev.observables:
pytest.skip(
"Skipped because device does not support the SparseHamiltonian observable."
@@ -724,7 +724,7 @@ def test_sample_values_hermitian(self, device, tol):
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device) and "Hermitian" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
A_ = np.array([[1, 2j], [-2j, 0]])
@@ -760,7 +760,7 @@ def test_sample_values_projector(self, device, tol):
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device) and "Projector" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Projector" not in dev.observables:
pytest.skip("Skipped because device does not support the Projector observable.")
theta = 0.543
@@ -808,7 +808,7 @@ def test_sample_values_hermitian_multi_qubit(self, device, tol):
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device) and "Hermitian" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
theta = 0.543
@@ -857,7 +857,7 @@ def test_sample_values_projector_multi_qubit(self, device, tol):
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device) and "Projector" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Projector" not in dev.observables:
pytest.skip("Skipped because device does not support the Projector observable.")
theta = 0.543
@@ -915,7 +915,7 @@ def test_paulix_pauliy(self, device, tol, skip_if):
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
theta = 0.432
@@ -959,7 +959,7 @@ def test_pauliz_hadamard(self, device, tol, skip_if):
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
theta = 0.432
@@ -1001,7 +1001,7 @@ def test_hermitian(self, device, tol, skip_if):
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
@@ -1095,7 +1095,7 @@ def test_projector(self, device, tol, skip_if): # pylint: disable=too-many-stat
if not dev.shots:
pytest.skip("Device is in analytic mode, cannot test sampling.")
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "Projector" not in dev.observables:
pytest.skip("Skipped because device does not support the Projector observable.")
@@ -1270,7 +1270,7 @@ def test_var_hermitian(self, device, tol):
n_wires = 2
dev = device(n_wires)
- if isinstance(dev, qml.Device) and "Hermitian" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
phi = 0.543
@@ -1306,7 +1306,7 @@ def test_var_projector(self, device, tol):
n_wires = 2
dev = device(n_wires)
- if isinstance(dev, qml.Device) and "Projector" not in dev.observables:
+ if isinstance(dev, qml.devices.LegacyDevice) and "Projector" not in dev.observables:
pytest.skip("Skipped because device does not support the Projector observable.")
phi = 0.543
@@ -1367,7 +1367,7 @@ def test_paulix_pauliy(self, device, tol, skip_if):
"""Test that a tensor product involving PauliX and PauliY works correctly"""
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
theta = 0.432
@@ -1399,7 +1399,7 @@ def test_pauliz_hadamard(self, device, tol, skip_if):
"""Test that a tensor product involving PauliZ and PauliY and hadamard works correctly"""
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
theta = 0.432
@@ -1449,7 +1449,7 @@ def circ(obs):
"""
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
@qml.qnode(dev)
@@ -1476,7 +1476,7 @@ def circ(wire_labels):
"""
dev = device(wires=3)
dev_custom_labels = device(wires=label_map)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
skip_if(dev, {"supports_tensor_observables": False})
def circ(wire_labels):
@@ -1498,7 +1498,7 @@ def test_hermitian(self, device, tol, skip_if):
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "Hermitian" not in dev.observables:
pytest.skip("Skipped because device does not support the Hermitian observable.")
@@ -1570,7 +1570,7 @@ def test_projector(self, device, tol, skip_if):
n_wires = 3
dev = device(n_wires)
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if "Projector" not in dev.observables:
pytest.skip("Skipped because device does not support the Projector observable.")
diff --git a/pennylane/devices/tests/test_templates.py b/pennylane/devices/tests/test_templates.py
index 07b0b56b39c..86e1101340a 100644
--- a/pennylane/devices/tests/test_templates.py
+++ b/pennylane/devices/tests/test_templates.py
@@ -33,7 +33,7 @@
def check_op_supported(op, dev):
"""Skip test if device does not support an operation. Works with both device APIs"""
- if isinstance(dev, qml.Device):
+ if isinstance(dev, qml.devices.LegacyDevice):
if op.name not in dev.operations:
pytest.skip("operation not supported.")
else:
diff --git a/pennylane/devices/tests/test_tracker.py b/pennylane/devices/tests/test_tracker.py
index 75fc6145ac8..c46a5ad952e 100644
--- a/pennylane/devices/tests/test_tracker.py
+++ b/pennylane/devices/tests/test_tracker.py
@@ -26,7 +26,9 @@ def test_tracker_initialization(self, device):
dev = device(1)
- if isinstance(dev, qml.Device) and not dev.capabilities().get("supports_tracker", False):
+ if isinstance(dev, qml.devices.LegacyDevice) and not dev.capabilities().get(
+ "supports_tracker", False
+ ):
pytest.skip("Device does not support a tracker")
assert isinstance(dev.tracker, qml.Tracker)
@@ -36,7 +38,9 @@ def test_tracker_updated_in_execution_mode(self, device):
dev = device(1)
- if isinstance(dev, qml.Device) and not dev.capabilities().get("supports_tracker", False):
+ if isinstance(dev, qml.devices.LegacyDevice) and not dev.capabilities().get(
+ "supports_tracker", False
+ ):
pytest.skip("Device does not support a tracker")
@qml.qnode(dev, diff_method="parameter-shift")
diff --git a/pennylane/qcut/cutstrategy.py b/pennylane/qcut/cutstrategy.py
index a26a528b338..2e92a8cdb87 100644
--- a/pennylane/qcut/cutstrategy.py
+++ b/pennylane/qcut/cutstrategy.py
@@ -41,7 +41,7 @@ class CutStrategy:
check out the :func:`qml.cut_circuit() ` transform for more details.
Args:
- devices (Union[qml.Device, Sequence[qml.Device]]): Single, or Sequence of, device(s).
+ devices (Union[qml.devices.Device, Sequence[qml.devices.Device]]): Single, or Sequence of, device(s).
Optional only when ``max_free_wires`` is provided.
max_free_wires (int): Number of wires for the largest available device. Optional only when
``devices`` is provided where it defaults to the maximum number of wires among
diff --git a/pennylane/workflow/interfaces/jax_jit.py b/pennylane/workflow/interfaces/jax_jit.py
index d52f686148e..cdfade8a979 100644
--- a/pennylane/workflow/interfaces/jax_jit.py
+++ b/pennylane/workflow/interfaces/jax_jit.py
@@ -96,7 +96,7 @@ def _get_counts_shape(mp: "qml.measurements.CountsMP", num_device_wires=0):
return outcome_counts
-def _result_shape_dtype_struct(tape: "qml.tape.QuantumScript", device: "qml.Device"):
+def _result_shape_dtype_struct(tape: "qml.tape.QuantumScript", device: "qml.devices.Device"):
"""Auxiliary function for creating the shape and dtype object structure
given a tape."""
@@ -125,7 +125,7 @@ def struct(mp, shots):
return tuple(shape) if tape.shots.has_partitioned_shots else shape[0]
-def _jac_shape_dtype_struct(tape: "qml.tape.QuantumScript", device: "qml.Device"):
+def _jac_shape_dtype_struct(tape: "qml.tape.QuantumScript", device: "qml.devices.Device"):
"""The shape of a jacobian for a single tape given a device.
Args:
@@ -167,14 +167,9 @@ def pure_callback_wrapper(p):
new_tapes = _set_fn(tapes.vals, p)
return _to_jax(execute_fn(new_tapes))
- if isinstance(device, qml.Device):
- device_supports_vectorization = device.capabilities().get("supports_broadcasting")
- else:
- # first order way of determining native parameter broadcasting support
- # will be inaccurate when inclusion of broadcast_expand depends on ExecutionConfig values (like adjoint)
- device_supports_vectorization = (
- qml.transforms.broadcast_expand not in device.preprocess()[0]
- )
+ # first order way of determining native parameter broadcasting support
+ # will be inaccurate when inclusion of broadcast_expand depends on ExecutionConfig values (like adjoint)
+ device_supports_vectorization = qml.transforms.broadcast_expand not in device.preprocess()[0]
out = jax.pure_callback(
pure_callback_wrapper, shape_dtype_structs, params, vectorized=device_supports_vectorization
)
diff --git a/pennylane/workflow/jacobian_products.py b/pennylane/workflow/jacobian_products.py
index d5ede1227a5..d3ae50dca65 100644
--- a/pennylane/workflow/jacobian_products.py
+++ b/pennylane/workflow/jacobian_products.py
@@ -18,7 +18,7 @@
import inspect
import logging
from collections.abc import Callable, Sequence
-from typing import Optional, Union
+from typing import Optional
import numpy as np
from cachetools import LRUCache
@@ -334,7 +334,7 @@ def compute_jacobian(self, tapes: QuantumScriptBatch):
class DeviceDerivatives(JacobianProductCalculator):
- """Calculate jacobian products via a device provided jacobian. This class relies on either ``qml.Device.gradients`` or
+ """Calculate jacobian products via a device provided jacobian. This class relies on
``qml.devices.Device.compute_derivatives``.
Args:
@@ -399,7 +399,7 @@ def __repr__(self):
def __init__(
self,
- device: Union["qml.devices.Device", "qml.Device"],
+ device: "qml.devices.Device",
execution_config: Optional["qml.devices.ExecutionConfig"] = None,
):
if execution_config is None:
diff --git a/tests/conftest.py b/tests/conftest.py
index 3094a2fd784..d478b6f0998 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -36,20 +36,6 @@
TOL_STOCHASTIC = 0.05
-# pylint: disable=too-few-public-methods
-class DummyDevice(DefaultGaussian):
- """Dummy device to allow Kerr operations"""
-
- _operation_map = DefaultGaussian._operation_map.copy()
- _operation_map["Kerr"] = lambda *x, **y: np.identity(2)
-
-
-@pytest.fixture(autouse=True)
-def set_numpy_seed():
- np.random.seed(9872653)
- yield
-
-
@pytest.fixture(scope="function", autouse=True)
def capture_legacy_device_deprecation_warnings():
with warnings.catch_warnings(record=True) as recwarn:
@@ -67,6 +53,20 @@ def capture_legacy_device_deprecation_warnings():
warnings.warn(message=w.message, category=w.category)
+# pylint: disable=too-few-public-methods
+class DummyDevice(DefaultGaussian):
+ """Dummy device to allow Kerr operations"""
+
+ _operation_map = DefaultGaussian._operation_map.copy()
+ _operation_map["Kerr"] = lambda *x, **y: np.identity(2)
+
+
+@pytest.fixture(autouse=True)
+def set_numpy_seed():
+ np.random.seed(9872653)
+ yield
+
+
@pytest.fixture(scope="session")
def tol():
"""Numerical tolerance for equality tests."""
@@ -181,12 +181,12 @@ def mock_device(monkeypatch):
"""A mock instance of the abstract Device class"""
with monkeypatch.context() as m:
- dev = qml.Device
+ dev = qml.devices.LegacyDevice
m.setattr(dev, "__abstractmethods__", frozenset())
m.setattr(dev, "short_name", "mock_device")
m.setattr(dev, "capabilities", lambda cls: {"model": "qubit"})
m.setattr(dev, "operations", {"RX", "RY", "RZ", "CNOT", "SWAP"})
- yield qml.Device(wires=2) # pylint:disable=abstract-class-instantiated
+ yield qml.devices.LegacyDevice(wires=2) # pylint:disable=abstract-class-instantiated
# pylint: disable=protected-access
diff --git a/tests/devices/test_default_qubit_legacy.py b/tests/devices/test_default_qubit_legacy.py
index f3c47f90e23..11ca082441c 100644
--- a/tests/devices/test_default_qubit_legacy.py
+++ b/tests/devices/test_default_qubit_legacy.py
@@ -2344,7 +2344,7 @@ def test_Hamiltonian_filtered_from_rotations(self, mocker):
dev = qml.device("default.qubit.legacy", wires=2, shots=10)
H = qml.Hamiltonian([0.1, 0.2], [qml.PauliX(0), qml.PauliZ(1)])
- spy = mocker.spy(qml.QubitDevice, "_get_diagonalizing_gates")
+ spy = mocker.spy(qml.devices.QubitDevice, "_get_diagonalizing_gates")
qs = qml.tape.QuantumScript([qml.RX(1, 0)], [qml.expval(qml.PauliX(0)), qml.expval(H)])
rotations = dev._get_diagonalizing_gates(qs)
@@ -2382,7 +2382,7 @@ def circuit(y, z, is_state_batched):
def test_super_expval_not_called(self, is_state_batched, mocker):
"""Tests basic expval result, and ensures QubitDevice.expval is not called."""
dev = qml.device("default.qubit.legacy", wires=1)
- spy = mocker.spy(qml.QubitDevice, "expval")
+ spy = mocker.spy(qml.devices.QubitDevice, "expval")
obs = qml.sum(qml.s_prod(0.1, qml.PauliX(0)), qml.s_prod(0.2, qml.PauliZ(0)))
assert np.isclose(dev.expval(obs), 0.2)
spy.assert_not_called()
diff --git a/tests/devices/test_device.py b/tests/devices/test_legacy_device.py
similarity index 99%
rename from tests/devices/test_device.py
rename to tests/devices/test_legacy_device.py
index c05a5e76309..c08d9411dca 100644
--- a/tests/devices/test_device.py
+++ b/tests/devices/test_legacy_device.py
@@ -22,7 +22,7 @@
import pytest
import pennylane as qml
-from pennylane import Device
+from pennylane.devices import LegacyDevice as Device
from pennylane.wires import Wires
mock_device_paulis = ["PauliX", "PauliY", "PauliZ"]
@@ -188,6 +188,12 @@ def get_device(wires=1):
yield get_device
+def test_deprecated_access():
+ """Test that accessing via top-level is deprecated."""
+ with pytest.warns(qml.PennyLaneDeprecationWarning, match="Device will no longer be accessible"):
+ qml.Device # pylint: disable=pointless-statement
+
+
# pylint: disable=pointless-statement
def test_invalid_attribute_in_devices_raises_error():
with pytest.raises(AttributeError, match="'pennylane.devices' has no attribute 'blabla'"):
@@ -1151,7 +1157,7 @@ class TestGrouping:
"""Tests for the use_grouping option for devices."""
# pylint: disable=too-few-public-methods, unused-argument, missing-function-docstring, missing-class-docstring
- class SomeDevice(qml.Device):
+ class SomeDevice(qml.devices.LegacyDevice):
name = ""
short_name = ""
pennylane_requires = ""
diff --git a/tests/test_qubit_device.py b/tests/devices/test_qubit_device.py
similarity index 99%
rename from tests/test_qubit_device.py
rename to tests/devices/test_qubit_device.py
index c42ca5a6d28..9edc522a408 100644
--- a/tests/test_qubit_device.py
+++ b/tests/devices/test_qubit_device.py
@@ -21,8 +21,8 @@
import pytest
import pennylane as qml
-from pennylane import QubitDevice
from pennylane import numpy as pnp
+from pennylane.devices import QubitDevice
from pennylane.measurements import (
Expectation,
ExpectationMP,
@@ -165,6 +165,12 @@ def _working_get_batch_size(tensor, expected_shape, expected_size):
return None
+def test_deprecated_access():
+ """Test that accessing via top-level is deprecated."""
+ with pytest.warns(qml.PennyLaneDeprecationWarning, match="Device will no longer be accessible"):
+ qml.QubitDevice # pylint: disable=pointless-statement
+
+
def test_notimplemented_circuit_hash(mock_qubit_device):
"""Test that the circuit hash property is not implemented"""
dev = mock_qubit_device()
@@ -1655,7 +1661,7 @@ def test_generate_basis_states():
def test_samples_to_counts_all_outomces():
"""Test that _samples_to_counts can handle counts with all outcomes."""
- class DummyQubitDevice(qml.QubitDevice):
+ class DummyQubitDevice(qml.devices.QubitDevice):
author = None
name = "bla"
@@ -1676,7 +1682,7 @@ def apply(self, operations, **kwargs):
def test_no_adjoint_jacobian_errors():
"""Test that adjoint_jacobian errors with batching and shot vectors"""
- class DummyQubitDevice(qml.QubitDevice):
+ class DummyQubitDevice(qml.devices.QubitDevice):
author = None
name = "bla"
diff --git a/tests/test_qutrit_device.py b/tests/devices/test_qutrit_device.py
similarity index 99%
rename from tests/test_qutrit_device.py
rename to tests/devices/test_qutrit_device.py
index 6291a3e9d71..8799d75234b 100644
--- a/tests/test_qutrit_device.py
+++ b/tests/devices/test_qutrit_device.py
@@ -22,8 +22,8 @@
from scipy.stats import unitary_group
import pennylane as qml
-from pennylane import QubitDevice, QutritDevice
from pennylane import numpy as pnp
+from pennylane.devices import QubitDevice, QutritDevice
from pennylane.measurements import (
Counts,
CountsMP,
@@ -142,6 +142,12 @@ def get_qutrit_device(wires=1):
# TODO: Add tests for expval, var after observables are added
+def test_deprecated_access():
+ """Test that accessing via top-level is deprecated."""
+ with pytest.warns(qml.PennyLaneDeprecationWarning, match="Device will no longer be accessible"):
+ qml.QutritDevice # pylint: disable=pointless-statement
+
+
class TestOperations:
"""Tests the logic related to operations"""
diff --git a/tests/gradients/parameter_shift/test_parameter_shift.py b/tests/gradients/parameter_shift/test_parameter_shift.py
index 237178b538d..e5a00b2cdf0 100644
--- a/tests/gradients/parameter_shift/test_parameter_shift.py
+++ b/tests/gradients/parameter_shift/test_parameter_shift.py
@@ -3563,8 +3563,7 @@ def cost_fn(weights, coeffs1, coeffs2, dev=None, broadcast=False):
tape = qml.tape.QuantumScript.from_queue(q)
tape.trainable_params = {0, 1, 2, 3, 4, 5}
tapes, fn = qml.gradients.param_shift(tape, broadcast=broadcast)
- execute_fn = dev.batch_execute if isinstance(dev, qml.Device) else dev.execute
- jac = fn(execute_fn(tapes))
+ jac = fn(dev.execute(tapes))
return jac
@staticmethod
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 51ffd43753b..6d9212dceb9 100644
--- a/tests/gradients/parameter_shift/test_parameter_shift_shot_vec.py
+++ b/tests/gradients/parameter_shift/test_parameter_shift_shot_vec.py
@@ -2228,8 +2228,7 @@ def cost_fn(weights, coeffs1, coeffs2, dev=None, broadcast=False):
tape = qml.tape.QuantumScript.from_queue(q, shots=dev.shots)
tape.trainable_params = {0, 1, 2, 3, 4, 5}
tapes, fn = qml.gradients.param_shift(tape, broadcast=broadcast)
- execute_fn = dev.batch_execute if isinstance(dev, qml.Device) else dev.execute
- return fn(execute_fn(tapes))
+ return fn(dev.execute(tapes))
@staticmethod
def cost_fn_expected(weights, coeffs1, coeffs2):
diff --git a/tests/interfaces/test_jacobian_products.py b/tests/interfaces/test_jacobian_products.py
index 2fc275558e7..3d758c38642 100644
--- a/tests/interfaces/test_jacobian_products.py
+++ b/tests/interfaces/test_jacobian_products.py
@@ -129,21 +129,6 @@ def test_device_jacobians_initialization_new_dev(self):
assert isinstance(jpc._jacs_cache, LRUCache)
assert len(jpc._jacs_cache) == 0
- def test_device_jacobians_initialization_old_dev(self):
- """Test the private attributes are set during initialization of a DeviceDerivatives class with the
- old device interface."""
-
- device = qml.devices.DefaultQubitLegacy(wires=5)
-
- jpc = DeviceDerivatives(device, aj_config)
-
- assert jpc._device is device
- assert jpc._execution_config == aj_config
- assert isinstance(jpc._results_cache, LRUCache)
- assert len(jpc._results_cache) == 0
- assert isinstance(jpc._jacs_cache, LRUCache)
- assert len(jpc._jacs_cache) == 0
-
def test_device_jacobians_repr(self):
"""Test the repr method for device jacobians."""
device = qml.device("default.qubit")
diff --git a/tests/test_debugging.py b/tests/test_debugging.py
index bdd10a4cfd5..4e049fd3e72 100644
--- a/tests/test_debugging.py
+++ b/tests/test_debugging.py
@@ -176,7 +176,7 @@ def circuit():
if "mixed" in dev.name:
qml.Snapshot(measurement=qml.density_matrix(wires=[0, 1]))
- if isinstance(dev, qml.QutritDevice):
+ if isinstance(dev, qml.devices.QutritDevice):
return qml.expval(qml.GellMann(0, 1))
return qml.expval(qml.PauliZ(0))
@@ -191,7 +191,7 @@ def circuit():
@pytest.mark.parametrize("diff_method", [None, "parameter-shift"])
def test_all_state_measurement_snapshot_pure_qubit_dev(self, dev, diff_method):
"""Test that the correct measurement snapshots are returned for different measurement types."""
- if isinstance(dev, (qml.devices.default_mixed.DefaultMixed, qml.QutritDevice)):
+ if isinstance(dev, (qml.devices.default_mixed.DefaultMixed, qml.devices.QutritDevice)):
pytest.skip()
@qml.qnode(dev, diff_method=diff_method)
@@ -230,7 +230,7 @@ def test_empty_snapshots(self, dev):
@qml.qnode(dev)
def circuit():
- if isinstance(dev, qml.QutritDevice):
+ if isinstance(dev, qml.devices.QutritDevice):
qml.THadamard(wires=0)
return qml.expval(qml.GellMann(0, index=6))
@@ -238,7 +238,7 @@ def circuit():
return qml.expval(qml.PauliX(0))
result = qml.snapshots(circuit)()
- if isinstance(dev, qml.QutritDevice):
+ if isinstance(dev, qml.devices.QutritDevice):
expected = {"execution_results": np.array(0.66666667)}
else:
expected = {"execution_results": np.array(1.0)}
@@ -700,7 +700,7 @@ def circuit():
assert np.allclose(result["execution_results"], expected["execution_results"])
- del result["execution_results"]
+ del result["execution_results"] # pylint: disable=unsupported-delete-operation
del expected["execution_results"]
_compare_numpy_dicts(result, expected)
diff --git a/tests/test_qnode_legacy.py b/tests/test_qnode_legacy.py
index f8e56cc6fb4..3ee36d99bdb 100644
--- a/tests/test_qnode_legacy.py
+++ b/tests/test_qnode_legacy.py
@@ -813,7 +813,9 @@ def test_no_defer_measurements_if_supported(self, mocker):
"""Test that the defer_measurements transform is not used during
QNode construction if the device supports mid-circuit measurements."""
dev = qml.device("default.qubit.legacy", wires=3)
- mocker.patch.object(qml.Device, "_capabilities", {"supports_mid_measure": True})
+ mocker.patch.object(
+ qml.devices.LegacyDevice, "_capabilities", {"supports_mid_measure": True}
+ )
spy = mocker.spy(qml.defer_measurements, "_transform")
@qml.qnode(dev)
diff --git a/tests/test_return_types_qnode.py b/tests/test_return_types_qnode.py
index 6f74f84bb14..364eb468922 100644
--- a/tests/test_return_types_qnode.py
+++ b/tests/test_return_types_qnode.py
@@ -2204,7 +2204,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2232,7 +2234,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2268,7 +2272,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2295,7 +2301,9 @@ def circuit(x):
all_shot_copies = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2326,7 +2334,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2358,7 +2368,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2395,7 +2407,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2427,7 +2441,9 @@ def circuit(x):
all_shot_copies = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2455,7 +2471,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2552,7 +2570,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2584,7 +2604,9 @@ def test_scalar_sample_with_obs(self, shot_vector, meas1, meas2, device):
raw_shot_vector = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2601,7 +2623,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2642,7 +2666,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2656,7 +2682,9 @@ def circuit(x):
for m in measurement_res
)
- for shot_tuple in dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector:
+ for shot_tuple in (
+ dev.shot_vector if isinstance(dev, qml.devices.LegacyDevice) else dev.shots.shot_vector
+ ):
for idx in range(shot_tuple.copies):
for i, r in enumerate(res[idx]):
if i % 2 == 0 or shot_tuple.shots == 1:
@@ -2674,7 +2702,9 @@ def test_scalar_counts_with_obs(self, shot_vector, meas1, meas2, device):
raw_shot_vector = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2691,7 +2721,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2726,7 +2758,9 @@ def test_scalar_counts_no_obs(self, shot_vector, meas1, meas2, device):
raw_shot_vector = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2743,7 +2777,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2774,7 +2810,9 @@ def test_probs_sample(self, shot_vector, sample_obs, device):
raw_shot_vector = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2799,7 +2837,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2835,7 +2875,9 @@ def test_probs_counts(self, shot_vector, sample_obs, device):
raw_shot_vector = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2860,7 +2902,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2896,7 +2940,9 @@ def test_sample_counts(self, shot_vector, sample_wires, counts_wires, device):
raw_shot_vector = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2927,7 +2973,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
@@ -2960,7 +3008,9 @@ def test_scalar_probs_sample_counts(self, shot_vector, meas1, meas2, device):
raw_shot_vector = [
shot_tuple.shots
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
for _ in range(shot_tuple.copies)
]
@@ -2983,7 +3033,9 @@ def circuit(x):
[
shot_tuple.copies
for shot_tuple in (
- dev.shot_vector if isinstance(dev, qml.Device) else dev.shots.shot_vector
+ dev.shot_vector
+ if isinstance(dev, qml.devices.LegacyDevice)
+ else dev.shots.shot_vector
)
]
)
diff --git a/tests/test_vqe.py b/tests/test_vqe.py
index e8edc6c84cf..ca7ea9a9e38 100644
--- a/tests/test_vqe.py
+++ b/tests/test_vqe.py
@@ -193,33 +193,6 @@ def amp_embed_and_strong_ent_layer(params, wires=None):
(amp_embed_and_strong_ent_layer, (EMBED_PARAMS, LAYER_PARAMS)),
]
-#####################################################
-# Device
-
-
-@pytest.fixture(scope="function", name="mock_device")
-def mock_device_fixture(monkeypatch):
- with monkeypatch.context() as m:
- m.setattr(qml.Device, "__abstractmethods__", frozenset())
- m.setattr(
- qml.Device, "_capabilities", {"supports_tensor_observables": True, "model": "qubit"}
- )
- m.setattr(qml.Device, "operations", ["RX", "RY", "Rot", "CNOT", "Hadamard", "StatePrep"])
- m.setattr(
- qml.Device, "observables", ["PauliX", "PauliY", "PauliZ", "Hadamard", "Hermitian"]
- )
- m.setattr(qml.Device, "short_name", "MockDevice")
- m.setattr(qml.Device, "expval", lambda self, x, y, z: 1)
- m.setattr(qml.Device, "var", lambda self, x, y, z: 2)
- m.setattr(qml.Device, "sample", lambda self, x, y, z: 3)
- m.setattr(qml.Device, "apply", lambda self, x, y, z: None)
-
- def get_device(wires=1):
- return qml.Device(wires=wires) # pylint:disable=abstract-class-instantiated
-
- yield get_device
-
-
#####################################################
# Queues
diff --git a/tests/transforms/test_qcut.py b/tests/transforms/test_qcut.py
index 1a78c1ab4e2..96b0d1e3af8 100644
--- a/tests/transforms/test_qcut.py
+++ b/tests/transforms/test_qcut.py
@@ -4681,7 +4681,7 @@ def test_init_raises(self, devices, imbalance_tolerance, num_fragments_probed):
"""Test if ill-initialized instances throw errors."""
if (
- isinstance(devices, (qml.Device, qml.devices.Device))
+ isinstance(devices, qml.devices.Device)
and imbalance_tolerance is None
and num_fragments_probed is None
):