class_docstr: Provides methods for calculating the JVP/VJP between the Jacobians of tapes and tangents/cotangents.
class_docstr_tok: ["Provides","methods","for","calculating","the","JVP\/VJP","between","the","Jacobians","of","tapes","and","tangents\/cotangents","."]
docstr: Compute the full Jacobian for a batch of tapes.
  
  This method is required to compute Jacobians in the ``tensorflow`` interface
  
  Args:
      tapes (tuple[.QuantumScript]): the batch of tapes to take the derivatives of
  
  **Examples:**
  
  For an instance of :class:`~.JacobianProductCalculator` ``jpc``, we have:
  
  >>> tape0 = qml.tape.QuantumScript([qml.RX(0.1, wires=0)], [qml.expval(qml.PauliZ(0))])
  >>> tape1 = qml.tape.QuantumScript([qml.RY(0.2, wires=0)], [qml.expval(qml.PauliZ(0)), qml.expval(qml.PauliX(0))])
  >>> batch = (tape0, tape1)
  >>> jpc.compute_jacobian(batch)
  (array(-0.09983342), (array(-0.19866933), array(0.98006658)))
  
  While this method could support non-scalar parameters in theory, no implementation currently supports
  jacobians with non-scalar parameters.
docstr_tok: ["Compute","the","full","Jacobian","for","a","batch","of","tapes",".","This","method","is","required","to","compute","Jacobians","in","the","``","tensorflow","``","interface","Args",":","tapes","(","tuple","[",".QuantumScript","]",")",":","the","batch","of","tapes","to","take","the","derivatives","of","*","*","Examples",":","*","*","For","an","instance","of",":","class",":","`","~.JacobianProductCalculator","`","``","jpc","``",",","we","have",":",">",">",">","tape0","=","qml.tape.QuantumScript","(","[","qml.RX","(","0.1",",","wires=0",")","]",",","[","qml.expval","(","qml.PauliZ","(","0",")",")","]",")",">",">",">","tape1","=","qml.tape.QuantumScript","(","[","qml.RY","(","0.2",",","wires=0",")","]",",","[","qml.expval","(","qml.PauliZ","(","0",")",")",",","qml.expval","(","qml.PauliX","(","0",")",")","]",")",">",">",">","batch","=","(","tape0",",","tape1",")",">",">",">","jpc.compute_jacobian","(","batch",")","(","array","(","-0.09983342",")",",","(","array","(","-0.19866933",")",",","array","(","0.98006658",")",")",")","While","this","method","could","support","non-scalar","parameters","in","theory",",","no","implementation","currently","supports","jacobians","with","non-scalar","parameters","."]
code: def compute_jacobian(self, tapes: Batch) -> Tuple:
      """Compute the full Jacobian for a batch of tapes.
  
      This method is required to compute Jacobians in the ``tensorflow`` interface
  
      Args:
          tapes (tuple[.QuantumScript]): the batch of tapes to take the derivatives of
  
      **Examples:**
  
      For an instance of :class:`~.JacobianProductCalculator` ``jpc``, we have:
  
      >>> tape0 = qml.tape.QuantumScript([qml.RX(0.1, wires=0)], [qml.expval(qml.PauliZ(0))])
      >>> tape1 = qml.tape.QuantumScript([qml.RY(0.2, wires=0)], [qml.expval(qml.PauliZ(0)), qml.expval(qml.PauliX(0))])
      >>> batch = (tape0, tape1)
      >>> jpc.compute_jacobian(batch)
      (array(-0.09983342), (array(-0.19866933), array(0.98006658)))
  
      While this method could support non-scalar parameters in theory, no implementation currently supports
      jacobians with non-scalar parameters.
  
      """
  
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 JacobianProductCalculator obj's underlying member method code with example usage: obj.compute_jacobian(tapes) without return types