code: def generate_enqueue_and_set_args(
      function_name,
      num_passed_args,
      num_cl_args,
      arg_types,
      work_around_arg_count_bug,
      warn_about_arg_count_bug,
      devs,
  ):
      _check_arg_size(function_name, num_cl_args, arg_types, devs)
  
      cache_key = (
          function_name,
          num_passed_args,
          num_cl_args,
          arg_types,
          __debug__,
          work_around_arg_count_bug,
          warn_about_arg_count_bug,
      )
  
      from_cache = False
      if not cl._PYOPENCL_NO_CACHE:
          try:
              pmod, enqueue_name = invoker_cache[cache_key]
              from_cache = True
          except KeyError:
              pass
  
      if not from_cache:
          pmod, enqueue_name = _generate_enqueue_and_set_args_module(
              *cache_key
          )
          invoker_cache.store_if_not_present(
              cache_key, (pmod, enqueue_name)
          )
  
      return (
          pmod.mod_globals[enqueue_name],
          pmod.mod_globals["set_args"],
      )
  
file_path: pyopencl/pyopencl/invoker.py
imports: import numpy
  from warnings import warn
  import pyopencl._cl
  from pytools.persistent_dict import WriteOncePersistentDict
  from pytools.py_codegen import Indentation, PythonCodeGenerator
  from pyopencl.tools import _NumpyTypesKeyBuilder, VectorArg
  import pyopencl
label_desc: Use image node_id 6 for calling a global function with example usage: generate_enqueue_and_set_args(function_name, num_passed_args, num_cl_args, arg_types, work_around_arg_count_bug, warn_about_arg_count_bug, devs) and returns: pmod,  pmod