def test_validate_backprop_method_invalid_device(self): """Test that the method for validating the backprop diff method tape raises an exception if the device does not support backprop.""" dev = qml.device("default.gaussian", wires=1) with pytest.raises(qml.QuantumFunctionError, match="does not support native computations"): QNode._validate_backprop_method(dev, None)
def test_validate_backprop_method_invalid_interface(self, monkeypatch): """Test that the method for validating the backprop diff method tape raises an exception if the wrong interface is provided""" dev = qml.device("default.qubit", wires=1) test_interface = "something" monkeypatch.setitem(dev._capabilities, "passthru_interface", test_interface) with pytest.raises(qml.QuantumFunctionError, match=f"when using the {test_interface}"): QNode._validate_backprop_method(dev, None)
def test_validate_backprop_child_method_wrong_interface(self, monkeypatch): """Test that the method for validating the backprop diff method tape raises an error if a child device supports backprop but using a different interface""" dev = qml.device("default.qubit", wires=1) test_interface = "something" orig_capabilities = dev.capabilities().copy() orig_capabilities["passthru_devices"] = { test_interface: "default.gaussian" } monkeypatch.setattr(dev, "capabilities", lambda: orig_capabilities) with pytest.raises(qml.QuantumFunctionError, match=r"when using the \['something'\] interface"): QNode._validate_backprop_method(dev, "another_interface")
def test_validate_backprop_method(self, monkeypatch): """Test that the method for validating the backprop diff method tape works as expected""" dev = qml.device("default.qubit", wires=1) test_interface = "something" monkeypatch.setitem(dev._capabilities, "passthru_interface", test_interface) method, diff_options, device = QNode._validate_backprop_method( dev, "something") assert method == "backprop" assert device is dev
def test_validate_backprop_child_method(self, monkeypatch): """Test that the method for validating the backprop diff method tape works as expected if a child device supports backprop""" dev = qml.device("default.qubit", wires=1) test_interface = "something" orig_capabilities = dev.capabilities().copy() orig_capabilities["passthru_devices"] = { test_interface: "default.gaussian" } monkeypatch.setattr(dev, "capabilities", lambda: orig_capabilities) method, diff_options, device = QNode._validate_backprop_method( dev, test_interface) assert method == "backprop" assert isinstance(device, qml.devices.DefaultGaussian)