code: def _get_adj_list_adjacency(self, umis, counts, threshold):
          ''' identify all umis within hamming distance threshold'''
  
          adj_list = {umi: [] for umi in umis}
          if len(umis) > 25:
              umi_length = len(umis[0])
              substr_idx = build_substr_idx(umis, umi_length, threshold)
              iter_umi_pairs = iter_nearest_neighbours(umis, substr_idx)
          else:
              iter_umi_pairs = itertools.combinations(umis, 2)
          for umi1, umi2 in iter_umi_pairs:
              if edit_distance(umi1, umi2) <= threshold:
                  adj_list[umi1].append(umi2)
                  adj_list[umi2].append(umi1)
  
          return adj_lisf _get_adj_list_adjacency(self, umis, counts, threshold):
          ''' identify all umis within hamming distance threshold'''
  
          adj_list = {umi: [] for umi in umis}
          if len(umis) > 25:
              umi_length = len(umis[0])
              substr_idx = build_substr_idx(umis, umi_length, threshold)
              iter_umi_pairs = iter_nearest_neighbours(umis, substr_idx)
          else:
              iter_umi_pairs = itertools.combinations(umis, 2)
          for umi1, umi2 in iter_umi_pairs:
              if edit_distance(umi1, umi2) <= threshold:
                  adj_list[umi1].append(umi2)
                  adj_list[umi2].append(umi1)
  
          return adj_list
docs: identify all umis within hamming distance threshold