def test_sort_iterators(self): iter1 = [{'chrom': '1', 'pos': 1}, {'chrom': '1', 'pos': 5}, {'chrom': '1', 'pos': 7}, {'chrom': '1', 'pos': 10}, {'chrom': '2', 'pos': 11}, {'chrom': '2', 'pos': 12}] iter1 = PeekableIterator(iter(iter1)) iter2 = [{'chrom': '1', 'pos': 0}, {'chrom': '1', 'pos': 3}, {'chrom': '1', 'pos': 6}, {'chrom': '2', 'pos': 5}, {'chrom': '2', 'pos': 11}, {'chrom': '2', 'pos': 13}] iter2 = PeekableIterator(iter(iter2)) expected = [{'chrom': '1', 'pos': 0}, {'chrom': '1', 'pos': 1}, {'chrom': '1', 'pos': 3}, {'chrom': '1', 'pos': 5}, {'chrom': '1', 'pos': 6}, {'chrom': '1', 'pos': 7}, {'chrom': '1', 'pos': 10}, {'chrom': '2', 'pos': 5}, {'chrom': '2', 'pos': 11}, {'chrom': '2', 'pos': 11}, {'chrom': '2', 'pos': 12}, {'chrom': '2', 'pos': 13}] for x, y in zip(_sort_iterators(iter1, iter2), expected): assert x == y
def test_peekable_iter(self): iterator = iter(['a', 'b', 'c', 'd', 'e', 'f']) iterator = PeekableIterator(iterator) assert 'a' == iterator.peek() assert 'b' == iterator.peek() assert 'a' == next(iterator) assert 'c' == iterator.peek() iterator.reset_peek() assert 'b' == iterator.peek() assert 'b' == next(iterator) iterator = iter(['a', 'b', 'c', 'd', 'e', 'f']) iterator = PeekableIterator(iterator) iterator.peek() iterator.peek() iterator.peek() iterator.reset_peek() assert 'a' == iterator.peek() iterator = iter(['a', 'b', 'c', 'd', 'e', 'f']) iterator = PeekableIterator(iterator) iterator.peek() iterator.peek() iterator.peek() iterator.peek() iterator.peek() iterator.peek() try: iterator.peek() self.fail('stopIteration expected') except StopIteration: pass assert 'a' == next(iterator) iterator = iter(['a', 'b', 'c', 'd', 'e', 'f']) iterator = PeekableIterator(iterator) assert 'a' == iterator.peek() assert 'a' == next(iterator) assert 'b' == iterator.peek()
def _group_overlaping_vars(variations_1, variations_2, ignore_2_or_more_overlaps=False, check_ref_match=True): if isinstance(variations_1, list) and isinstance(variations_2, list): # This is intented only for testing and debugin snps_1 = PeekableIterator(iter(variations_1)) snps_2 = PeekableIterator(iter(variations_2)) else: snps_1 = PeekableIterator(_iterate_vars(variations_1)) snps_2 = PeekableIterator(_iterate_vars(variations_2)) while True: sorted_vars = _sort_iterators(snps_1, snps_2) region = _get_overlapping_region(sorted_vars) snps_1.reset_peek() snps_2.reset_peek() snps1_in_region = _get_vars_in_region(snps_1, region) snps2_in_region = _get_vars_in_region(snps_2, region) snps_1.reset_peek() snps_2.reset_peek() if not snps1_in_region and not snps2_in_region: break yield (snps1_in_region, snps2_in_region)