class_docstr: Converts a transform that has the signature ``(tape -> Sequence(tape), fn)`` to a transform dispatcher
  that can act on :class:`pennylane.tape.QuantumTape`, quantum function, :class:`pennylane.QNode`,
  :class:`pennylane.devices.Device`.
  
  .. warning::
  
      This class is developer-facing and should not be used directly. Instead, use
      :func:`qml.transform <pennylane.transform>` if you would like to make a custom
      transform.
  
  .. seealso:: :func:`~.pennylane.transform`
class_docstr_tok: ["Converts","a","transform","that","has","the","signature","``","(","tape","-",">","Sequence","(","tape",")",",","fn",")","``","to","a","transform","dispatcher","that","can","act","on",":","class",":","`","pennylane.tape.QuantumTape","`",",","quantum","function",",",":","class",":","`","pennylane.QNode","`",",",":","class",":","`","pennylane.devices.Device","`",".","..","warning",":",":","This","class","is","developer-facing","and","should","not","be","used","directly",".","Instead",",","use",":","func",":","`","qml.transform","<","pennylane.transform",">","`","if","you","would","like","to","make","a","custom","transform",".","..","seealso",":",":",":","func",":","`","~.pennylane.transform","`"]
docstr: Register a custom QNode execution wrapper function
  for the batch transform.
  
  **Example**
  
  .. code-block:: python
  
      @transform
      def my_transform(tape, *targs, **tkwargs):
          ...
          return tapes, processing_fn
  
      @my_transform.custom_qnode_transform
      def my_custom_qnode_wrapper(self, qnode, targs, tkwargs):
          tkwargs = {**tkwargs, shots=100}
          return self.default_qnode_transform(qnode, targs, tkwargs)
  
  The custom QNode execution wrapper must have arguments
  ``self`` (the batch transform object), ``qnode`` (the input QNode
  to transform and execute), ``targs`` and ``tkwargs`` (the transform
  arguments and keyword arguments respectively).
  
  It should return a QNode that accepts the *same* arguments as the
  input QNode with the transform applied.
  
  The default :meth:`~.default_qnode_transform` method may be called
  if only pre- or post-processing dependent on QNode arguments is required.
docstr_tok: ["Register","a","custom","QNode","execution","wrapper","function","for","the","batch","transform",".","*","*","Example","*","*","..","code-block",":",":","python","@","transform","def","my_transform","(","tape",",","*","targs",",","*","*","tkwargs",")",":","...","return","tapes",",","processing_fn","@","my_transform.custom_qnode_transform","def","my_custom_qnode_wrapper","(","self",",","qnode",",","targs",",","tkwargs",")",":","tkwargs","=","{","*","*","tkwargs",",","shots=100","}","return","self.default_qnode_transform","(","qnode",",","targs",",","tkwargs",")","The","custom","QNode","execution","wrapper","must","have","arguments","``","self","``","(","the","batch","transform","object",")",",","``","qnode","``","(","the","input","QNode","to","transform","and","execute",")",",","``","targs","``","and","``","tkwargs","``","(","the","transform","arguments","and","keyword","arguments","respectively",")",".","It","should","return","a","QNode","that","accepts","the","*","same","*","arguments","as","the","input","QNode","with","the","transform","applied",".","The","default",":","meth",":","`","~.default_qnode_transform","`","method","may","be","called","if","only","pre-","or","post-processing","dependent","on","QNode","arguments","is","required","."]
code: def custom_qnode_transform(self, fn):
      """Register a custom QNode execution wrapper function
      for the batch transform.
  
      **Example**
  
      .. code-block:: python
  
          @transform
          def my_transform(tape, *targs, **tkwargs):
              ...
              return tapes, processing_fn
  
          @my_transform.custom_qnode_transform
          def my_custom_qnode_wrapper(self, qnode, targs, tkwargs):
              tkwargs = {**tkwargs, shots=100}
              return self.default_qnode_transform(qnode, targs, tkwargs)
  
      The custom QNode execution wrapper must have arguments
      ``self`` (the batch transform object), ``qnode`` (the input QNode
      to transform and execute), ``targs`` and ``tkwargs`` (the transform
      arguments and keyword arguments respectively).
  
      It should return a QNode that accepts the *same* arguments as the
      input QNode with the transform applied.
  
      The default :meth:`~.default_qnode_transform` method may be called
      if only pre- or post-processing dependent on QNode arguments is required.
      """
      self._qnode_transform = types.MethodType(fn, self)
  
imports: import functools
  import os
  import copy
  import warnings
  import types
  import pennylane
label_desc: Use image node_id 10 for calling the TransformDispatcher obj's underlying member method code with example usage: obj.custom_qnode_transform(fn) without return types