class_docstr: As part of Numba's preprocessing step, incoming function arguments are
  modified based on the associated type for that argument that was used
  to JIT the kernel. However it only knows how to handle built in array
  types natively. With string UDFs, the jitted type is string_view*,
  which numba does not know how to handle.
  
  This class converts string_view* to raw pointer arguments, which Numba
  knows how to use.
  
  See numba.cuda.compiler._prepare_args for details.
code: def prepare_args(self, ty, val, **kwargs):
      if isinstance(ty, types.CPointer) and isinstance(
          ty.dtype, (StringView, UDFString)
      ):
          return types.uint64, val.ptr if isinstance(
              val, rmm._lib.device_buffer.DeviceBuffer
          ) else val.get_ptr(mode="read")
      else:
          return ty, val
  
imports: import operator
  import numpy
  from numba import types
  from numba.core.extending import models, register_model
  from numba.core.typing import signature
  from numba.core.typing.templates import AbstractTemplate, AttributeTemplate
  from numba.cuda.cudadecl import registry
  import rmm
label_desc: Use image node_id 1 for calling the StrViewArgHandler obj's underlying member method code with example usage: obj.prepare_args(ty, val) and returns: types,  unknown, ty,  val