class_docstr: Generates and executes code to produce a large number of variable-size
  lists, simply.
  
  .. note:: This functionality is provided as a preview. Its interface
      is subject to change until this notice is removed.
  
  .. versionadded:: 2013.1
  
  Here's a usage example::
  
      from pyopencl.algorithm import ListOfListsBuilder
      builder = ListOfListsBuilder(context, [("mylist", np.int32)], """
              void generate(LIST_ARG_DECL USER_ARG_DECL index_type i)
              {
                  int count = i % 4;
                  for (int j = 0; j < count; ++j)
                  {
                      APPEND_mylist(count);
                  }
              }
              """, arg_decls=[])
  
      result, event = builder(queue, 2000)
  
      inf = result["mylist"]
      assert inf.count == 3000
      assert (inf.list.get()[-6:] == [1, 2, 2, 3, 3, 3]).all()
  
  The function ``generate`` above is called once for each "input object".
  Each input object can then generate zero or more list entries.
  The number of these input objects is given to :meth:`__call__` as *n_objects*.
  List entries are generated by calls to ``APPEND_<list name>(value)``.
  Multiple lists may be generated at once.
  
  .. automethod:: __init__
  .. automethod:: __call__
code: def do_not_vectorize(self):
      return self.complex_kernel and any(
          dev.type & cl.device_type.CPU for dev in self.context.devices
      )
  
imports: from dataclasses import dataclass
  from typing import Optional
  import numpy
  import pyopencl
  import pyopencl.array
  from pyopencl.elementwise import ElementwiseKernel
  from pyopencl.scan import ScanTemplate, GenericScanKernel
  from pyopencl.tools import dtype_to_ctype, get_arg_offset_adjuster_code
  from pytools import memoize, memoize_method
  from mako.template import Template
label_desc: Use image node_id 4 for calling the ListOfListsBuilder obj's underlying member method code with example usage: obj.do_not_vectorize() and returns: unknown