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)
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)
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 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()