code: def get_hankel_01_kernel(context, out_dtype, x_dtype):
      if x_dtype != np.complex128:
          raise NotImplementedError("non-complex double dtype")
      if x_dtype != out_dtype:
          raise NotImplementedError("different input/output types")
  
      return get_elwise_kernel(
          context,
          [
              VectorArg(out_dtype, "h0", with_offset=True),
              VectorArg(out_dtype, "h1", with_offset=True),
              VectorArg(x_dtype, "x", with_offset=True),
          ],
          """
          cdouble_t h0_loc;
          cdouble_t h1_loc;
          hankel_01_complex(x[i], &h0_loc, &h1_loc, 1);
          h0[i] = h0_loc;
          h1[i] = h1_loc;
          """,
          name="hankel_complex_kernel",
          preamble="""
          #if __OPENCL_C_VERSION__ < 120
          #pragma OPENCL EXTENSION cl_khr_fp64: enable
          #endif
          #define PYOPENCL_DEFINE_CDOUBLE
          #include <pyopencl-complex.h>
          #include <pyopencl-hankel-complex.cl>
          """,
      )
  
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 35 for calling a global function with example usage: get_hankel_01_kernel(context, out_dtype, x_dtype) and returns: get_elwise_kernel