code: def _chunk(iterable, size):
      
      # We're going to use some star magic to chunk the iterable. We create a
      # copy of the iterator size times, then pull a value from each to form a
      # chunk. The last chunk may have some trailing Nones if the length of the
      # iterable isn't a multiple of size, so we filter them out.
  
      args = (iter(iterable),) * size
  
      return (
          # pylint: disable=star-args
          itertools.takewhile(lambda x: x is not None, group)
          for group in itertools.zip_longest(*args)
      )
docs: Split an iterable into chunks of a fixed size.