class_docstr: Tests for the mutual information functions
docstr: Test that the gradient of relative entropy works for QNodes
  with the TensorFlow interface
docstr_tok: ["Test","that","the","gradient","of","relative","entropy","works","for","QNodes","with","the","TensorFlow","interface"]
code: def test_qnode_grad_tf(self, param, interface):
      """Test that the gradient of relative entropy works for QNodes
      with the TensorFlow interface"""
      import tensorflow as tf
  
      dev = qml.device("default.qubit", wires=2)
  
      @qml.qnode(dev, interface=interface, diff_method="backprop")
      def circuit1(param):
          qml.RY(param, wires=0)
          qml.CNOT(wires=[0, 1])
          return qml.state()
  
      @qml.qnode(dev, interface=interface, diff_method="backprop")
      def circuit2(param):
          qml.RY(param, wires=0)
          qml.CNOT(wires=[0, 1])
          return qml.state()
  
      expected = [
          np.sin(param[0] / 2)
          * np.cos(param[0] / 2)
          * (
              np.log(np.tan(param[0] / 2) ** 2)
              - np.log(np.tan(param[1] / 2) ** 2)
          ),
          np.cos(param[0] / 2) ** 2 * np.tan(param[1] / 2)
          - np.sin(param[0] / 2) ** 2 / np.tan(param[1] / 2),
      ]
  
      param0, param1 = tf.Variable(param[0]), tf.Variable(param[1])
      with tf.GradientTape() as tape:
          out = qml.qinfo.relative_entropy(
              circuit1, circuit2, [0], [1]
          )((param0,), (param1,))
  
      actual = tape.gradient(out, [param0, param1])
  
      assert np.allclose(actual, expected, atol=1e-5)
  
imports: import pytest
  import pennylane
  from pennylane import numpy
label_desc: Use image node_id 6 for calling the TestRelativeEntropy obj's underlying member method code with example usage: obj.test_qnode_grad_tf(param, interface) and returns: qml, qml