code: def chunked_iter(src, size, **kw):
      """Generates *size*-sized chunks from *src* iterable. Unless the
      optional *fill* keyword argument is provided, iterables not even
      divisible by *size* will have a final chunk that is smaller than
      *size*.
      >>> list(chunked_iter(range(10), 3))
      [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
      >>> list(chunked_iter(range(10), 3, fill=None))
      [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, None, None]]
  
      Note that ``fill=None`` in fact uses ``None`` as the fill value.
      """
      # TODO: add count kwarg?
      if not is_iterable(src):
          raise TypeError("expected an iterable")
      size = int(size)
      if size <= 0:
          raise ValueError("expected a positive integer chunk size")
      do_fill = True
      try:
          fill_val = kw.pop("fill")
      except KeyError:
          do_fill = False
          fill_val = None
      if kw:
          raise ValueError(
              "got unexpected keyword arguments: %r" % kw.keys()
          )
      if not src:
          return
      postprocess = lambda chk: chk
      if isinstance(src, basestring):
          postprocess = lambda chk, _sep=type(src)(): _sep.join(chk)
      src_iter = iter(src)
      while True:
          cur_chunk = list(itertools.islice(src_iter, size))
          if not cur_chunk:
              break
          lc = len(cur_chunk)
          if lc < size and do_fill:
              cur_chunk[lc:] = [fill_val] * (size - lc)
          yield postprocess(cur_chunk)
      return
  
imports: import os
  import math
  import time
  import codecs
  import random
  import socket
  import hashlib
  import itertools
  from collections import Mapping, Sequence, Set, ItemsView
label_desc: Use image node_id 7 for calling a global function with example usage: chunked_iter(src, size) without return types