code: def get_binary_func_kernel(
      context,
      func_name,
      x_dtype,
      y_dtype,
      out_dtype,
      preamble="",
      name=None,
  ):
      if name is None:
          name = func_name
  
      return get_elwise_kernel(
          context,
          [
              VectorArg(out_dtype, "z", with_offset=True),
              VectorArg(x_dtype, "x", with_offset=True),
              VectorArg(y_dtype, "y", with_offset=True),
          ],
          f"z[i] = {func_name}(x[i], y[i])",
          name=f"{name}_kernel",
          preamble=preamble,
      )
  
imports: import enum
  from typing import Any, List, Optional, Tuple, Union
  import numpy
  import pyopencl
  from pyopencl.tools import context_dependent_memoize
  from pyopencl.tools import dtype_to_ctype, DtypedArgument, VectorArg, ScalarArg, KernelTemplateBase, dtype_to_c_struct
  from pytools import memoize_method
label_desc: Use image node_id 27 for calling a global function with example usage: get_binary_func_kernel(context, func_name, x_dtype, y_dtype, out_dtype, preamble, name) and returns: get_elwise_kernel