class_docstr: Tests for the jvp function
class_docstr_tok: ["Tests","for","the","jvp","function"]
docstr: A tape with no trainable parameters will simply return None
docstr_tok: ["A","tape","with","no","trainable","parameters","will","simply","return","None"]
code: def test_no_trainable_parameters(self, batch_dim):
      """A tape with no trainable parameters will simply return None"""
      x = (
          0.4
          if batch_dim is None
          else 0.4 * np.arange(1, 1 + batch_dim)
      )
  
      with qml.queuing.AnnotatedQueue() as q:
          qml.RX(x, wires=0)
          qml.CNOT(wires=[0, 1])
          qml.expval(qml.PauliZ(0))
  
      tape = qml.tape.QuantumScript.from_queue(q)
      tape.trainable_params = {}
      tangent = np.array([1.0])
      tapes, fn = qml.gradients.jvp(tape, tangent, param_shift)
  
      assert tapes == tuple()
      assert qml.math.allclose(fn(tapes), np.array(0.0))
  
imports: import pytest
  import pennylane
  from pennylane import numpy
  from pennylane.gradients import param_shift
label_desc: Use image node_id 1 for calling the TestJVP obj's underlying member method code with example usage: obj.test_no_trainable_parameters(batch_dim) without return types