class_docstr: Test the tensorflow interface execute function
  integrates well for both forward and backward execution
class_docstr_tok: ["Test","the","tensorflow","interface","execute","function","integrates","well","for","both","forward","and","backward","execution"]
docstr: Test jacobian calculation
docstr_tok: ["Test","jacobian","calculation"]
code: def test_jacobian(self, execute_kwargs, shots, device):
      """Test jacobian calculation"""
      a = tf.Variable(0.1)
      b = tf.Variable(0.2)
  
      def cost(a, b):
          ops = [
              qml.RY(a, wires=0),
              qml.RX(b, wires=1),
              qml.CNOT(wires=[0, 1]),
          ]
          m = [qml.expval(qml.PauliZ(0)), qml.expval(qml.PauliY(1))]
          tape = qml.tape.QuantumScript(ops, m, shots=shots)
          return qml.math.hstack(
              execute([tape], device, **execute_kwargs)[0],
              like="tensorflow",
          )
  
      with tf.GradientTape() as tape:
          res = cost(a, b)
      expected = [tf.cos(a), -tf.cos(a) * tf.sin(b)]
      assert np.allclose(
          res, expected, atol=atol_for_shots(shots), rtol=0
      )
  
      jac = tape.jacobian(res, [a, b])
      assert isinstance(jac, list) and len(jac) == 2
      assert jac[0].shape == (2,)
      assert jac[1].shape == (2,)
  
      expected = (
          [-tf.sin(a), tf.sin(a) * tf.sin(b)],
          [0, -tf.cos(a) * tf.cos(b)],
      )
      for _r, _e in zip(jac, expected):
          assert np.allclose(_r, _e, atol=atol_for_shots(shots))
  
imports: import pytest
  import numpy
  import pennylane
  from pennylane.devices import DefaultQubit
  from pennylane.gradients import param_shift
  from pennylane import execute
label_desc: Use image node_id 3 for calling the TestTensorflowExecuteIntegration obj's underlying member method code with example usage: obj.test_jacobian(execute_kwargs, shots, device) and returns: qml