code: def _construct_signature(frame, return_type, args):
      """
      Build the signature of numba types that will be used to
      actually JIT the kernel itself later, accounting for types
      and offsets. Skips columns with unsupported dtypes.
      """
      if not return_type.is_internal:
          return_type = CPointer(return_type)
      else:
          return_type = return_type[::1]
      # Tuple of arrays, first the output data array, then the mask
      return_type = Tuple((return_type, boolean[::1]))
      offsets = []
      sig = [return_type, int64]
      for col in _supported_cols_from_frame(frame).values():
          sig.append(_masked_array_type_from_col(col))
          offsets.append(int64)
  
      # return_type, size, data, masks, offsets, extra args
      sig = void(*(sig + offsets + [typeof(arg) for arg in args]))
  
      return sig
  
imports: import os
  from typing import Any, Callable, Dict
  import cachetools
  import cupy
  import llvmlite.binding
  import numpy
  from cuda import cudart
  from numba import cuda, typeof
  from numba.core.datamodel import default_manager, models
  from numba.core.errors import TypingError
  from numba.core.extending import register_model
  from numba.np import numpy_support
  from numba.types import CPointer, Poison, Record, Tuple, boolean, int64, void
  import rmm
  from cudf._lib.strings_udf import column_from_udf_string_array, column_to_string_view_array
  from cudf.api.types import is_scalar
  from cudf.core.column.column import as_column
  from cudf.core.dtypes import dtype
  from cudf.core.udf.masked_typing import MaskedType
  from cudf.core.udf.strings_typing import str_view_arg_handler, string_view, udf_string
  from cudf.utils import cudautils
  from cudf.utils._numba import _CUDFNumbaConfig, _get_ptx_file
  from cudf.utils.dtypes import BOOL_TYPES, DATETIME_TYPES, NUMERIC_TYPES, STRING_TYPES, TIMEDELTA_TYPES
  from cudf.utils.nvtx_annotation import _cudf_nvtx_annotate
  from cudf.utils.utils import initfunc
label_desc: Use image node_id 6 for calling a global function with example usage: _construct_signature(frame, return_type, args) and returns: sig