code: def iterable_source(iterable, target):
      
      it = iter(iterable)
      for item in it:
          try:
              target.send(item)
          except StopIteration:
              return prepend(item, it)
      return empty_iter()
docs: Convert an iterable into a stream of events.
  
      Args:
          iterable: A series of items which will be sent to the target one by one.
          target: The target coroutine or sink.
  
      Returns:
          An iterator over any remaining items.