code: def parallel_iter(source_iterables: Sequence[Iterable[Optional[Any]]],
                    target_iterable: Iterable[Optional[Any]],
                    skip_blanks: bool = True):
      
      source_iterators = [iter(s) for s in source_iterables]
      target_iterator = iter(target_iterable)
      return parallel_iterate(source_iterators, target_iterator, skip_blanks)
docs: Creates iterators over parallel iteratables by calling iter() on the iterables
      and chaining to parallel_iterate(). The purpose of the separation is to allow
      the caller to save iterator state between calls, if desired.
  
      :param source_iterables: A list of source iterables.
      :param target_iterable: A target iterable.
      :param skip_blanks: Whether to skip empty target lines.
      :return: Iterators over sources and target.