class_docstr: Sort an array (or one axis of one) using a sorting network.
  
  Will only work if the axis of the array to be sorted has a length
  that is a power of 2.
  
  .. versionadded:: 2015.2
  
  .. seealso:: :class:`pyopencl.algorithm.RadixSort`
  
  .. automethod:: __call__
class_docstr_tok: ["Sort","an","array","(","or","one","axis","of","one",")","using","a","sorting","network",".","Will","only","work","if","the","axis","of","the","array","to","be","sorted","has","a","length","that","is","a","power","of","2",".","..","versionadded",":",":","2015.2","..","seealso",":",":",":","class",":","`","pyopencl.algorithm.RadixSort","`","..","automethod",":",":","__call__"]
code: def get_program(self, letter, argsort, params):
      defstpl = Template(_tmpl.defines)
  
      defs = defstpl.render(
          NS="\\",
          argsort=argsort,
          inc=params[0],
          dir=params[1],
          dtype=params[2],
          idxtype=params[3],
          dsize=params[4],
          nsize=params[5],
      )
  
      kid = Template(self.kernels_srcs[letter]).render(argsort=argsort)
  
      prg = cl.Program(self.context, defs + kid).build()
      return prg
  
file_path: pyopencl/pyopencl/bitonic_sort.py
imports: import pyopencl
  from pyopencl.tools import dtype_to_ctype
  from operator import mul
  from functools import reduce
  from pytools import memoize_method
  from mako.template import Template
  import pyopencl.bitonic_sort_templates
label_desc: Use image node_id 3 for calling the BitonicSort obj's underlying member method code with example usage: obj.get_program(letter, argsort, params) and returns: prg