code: def iter_nearest_neighbours(umis, substr_idx):
      '''
      Added by Matt 06/05/17
      use substring dict to get (approximately) all the nearest neighbours to
      each in a set of umis.
      '''
      for i, u in enumerate(umis, 1):
          neighbours = set()
          for idx, substr_map in substr_idx.items():
              u_sub = u[slice(*idx)]
              neighbours = neighbours.union(substr_map[u_sub])
          neighbours.difference_update(umis[:i])
          for nbr in neighbours:
              yield u, nbf iter_nearest_neighbours(umis, substr_idx):
      '''
      Added by Matt 06/05/17
      use substring dict to get (approximately) all the nearest neighbours to
      each in a set of umis.
      '''
      for i, u in enumerate(umis, 1):
          neighbours = set()
          for idx, substr_map in substr_idx.items():
              u_sub = u[slice(*idx)]
              neighbours = neighbours.union(substr_map[u_sub])
          neighbours.difference_update(umis[:i])
          for nbr in neighbours:
              yield u, nbr
docs: Added by Matt 06/05/17
      use substring dict to get (approximately) all the nearest neighbours to
      each in a set of umis.