code: def _function_wrapper_gpu(
      self, batch_processing, function, num_outputs, *dlpack_inputs
  ):
      def wrapped_func(*inputs):
          return PythonFunction._cupy_stream_wrapper(function, *inputs)
  
      if batch_processing:
          return PythonFunction.function_wrapper_batch(
              self.pipeline,
              wrapped_func,
              num_outputs,
              cupy.fromDlpack,
              lambda t: t.toDlpack(),
              *dlpack_inputs,
          )
      else:
          return PythonFunction.function_wrapper_per_sample(
              self.pipeline,
              wrapped_func,
              num_outputs,
              cupy.fromDlpack,
              lambda t: t.toDlpack(),
              *dlpack_inputs,
          )
  
imports: import nvidia.dali.python_function_plugin
  from nvidia.dali import backend
  from nvidia.dali import ops
  from nvidia.dali.ops import _registry
  from nvidia.dali.data_node import DataNode
  from nvidia.dali.pipeline import Pipeline
  from nvidia.dali.types import CUDAStream
label_desc: Use image node_id 7 for calling the PythonFunction obj's underlying member method code with example usage: obj._function_wrapper_gpu(batch_processing, function, num_outputs) and returns: PythonFunction, PythonFunction, PythonFunction