class_docstr: Compute jacobian products using the native device methods.
  
  Args:
      device (pennylane.devices.Device): the device for execution and derivatives.
          Must define both the vjp and jvp.
      execution_config (pennylane.devices.ExecutionConfig): a datastructure containing the options needed to fully
         describe the execution.
  
  >>> dev = qml.device('default.qubit')
  >>> config = qml.devices.ExecutionConfig(gradient_method="adjoint")
  >>> jpc = DeviceJacobianProducts(dev, config)
  
  This class relies on :meth:`~.devices.Device.compute_vjp` and :meth:`~.devices.Device.execute_and_compute_jvp`,
  and works strictly for the newer device interface :class:`~.devices.Device`.  This contrasts :class:`~.DeviceDerivatives`
  which works for both device interfaces and requests the full jacobian from the device.
class_docstr_tok: ["Compute","jacobian","products","using","the","native","device","methods",".","Args",":","device","(","pennylane.devices.Device",")",":","the","device","for","execution","and","derivatives",".","Must","define","both","the","vjp","and","jvp",".","execution_config","(","pennylane.devices.ExecutionConfig",")",":","a","datastructure","containing","the","options","needed","to","fully","describe","the","execution",".",">",">",">","dev","=","qml.device","(","'default.qubit","'",")",">",">",">","config","=","qml.devices.ExecutionConfig","(","gradient_method=","''","adjoint","''",")",">",">",">","jpc","=","DeviceJacobianProducts","(","dev",",","config",")","This","class","relies","on",":","meth",":","`","~.devices.Device.compute_vjp","`","and",":","meth",":","`","~.devices.Device.execute_and_compute_jvp","`",",","and","works","strictly","for","the","newer","device","interface",":","class",":","`","~.devices.Device","`",".","This","contrasts",":","class",":","`","~.DeviceDerivatives","`","which","works","for","both","device","interfaces","and","requests","the","full","jacobian","from","the","device","."]
code: def execute_and_compute_jvp(
      self, tapes: Batch, tangents: Tuple[Tuple[TensorLike]]
  ) -> Tuple[ResultBatch, Tuple]:
      if logger.isEnabledFor(logging.DEBUG):  # pragma: no cover
          logger.debug(
              "execute_and_compute_jvp called with (%s, %s)",
              tapes,
              tangents,
          )
      numpy_tapes = tuple(
          qml.transforms.convert_to_numpy_parameters(t) for t in tapes
      )
      tangents = qml.math.unwrap(tangents)
      return self._device.execute_and_compute_jvp(
          numpy_tapes, tangents, self._execution_config
      )
  
imports: import abc
  from functools import partial
  import inspect
  import logging
  from typing import Tuple, Callable, Optional, Union
  from cachetools import LRUCache
  import numpy
  import pennylane
  from pennylane.tape import QuantumScript
  from pennylane.typing import ResultBatch, TensorLike
label_desc: Use image node_id 3 for calling the DeviceJacobianProducts obj's underlying member method code with example usage: obj.execute_and_compute_jvp(tapes, tangents) and returns: self