code: def get_copy_kernel(context, dtype_dest, dtype_src):
      src = "src[i]"
      if dtype_dest.kind == "c" != dtype_src.kind:
          name = complex_dtype_to_name(dtype_dest)
          src = f"{name}_fromreal({src})"
  
      if dtype_dest.kind == "c" and dtype_src != dtype_dest:
          name = complex_dtype_to_name(dtype_dest)
          src = f"{name}_cast({src})"
  
      if dtype_dest != dtype_src and (
          dtype_dest.kind == "V" or dtype_src.kind == "V"
      ):
          raise TypeError("copying between non-identical struct types")
  
      return get_elwise_kernel(
          context,
          "{tp_dest} *dest, {tp_src} *src".format(
              tp_dest=dtype_to_ctype(dtype_dest),
              tp_src=dtype_to_ctype(dtype_src),
          ),
          f"dest[i] = {src}",
          preamble=dtype_to_c_struct(context.devices[0], dtype_dest),
          name="copy",
      )
  
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 9 for calling a global function with example usage: get_copy_kernel(context, dtype_dest, dtype_src) and returns: get_elwise_kernel