def test_filter_passesAllThroughWhenNoFilters(self): base_collection = [1, 2, 3, 4, 5] filters = {} generator = utils.FilteredGenerator(filters) actual_collection = [x for x in generator.filter(base_collection)] self.assertEqual([(1, None), (2, None), (3, None), (4, None), (5, None)], actual_collection)
def test_filter_singleFilter(self): filters = {'div by 2': lambda x: x % 2 == 0} generator = utils.FilteredGenerator(filters) base_collection = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] actual_collection = [x for x in generator.filter(base_collection)] self.assertEqual([(1, None), (2, 'div by 2'), (3, None), (4, 'div by 2'), (5, None), (6, 'div by 2'), (7, None), (8, 'div by 2'), (9, None), (10, 'div by 2')], actual_collection)
def test_filter_multipleFilterAreSortedByName(self): filters = { 'div by 5': lambda x: x % 5 == 0, 'div by 2': lambda x: x % 2 == 0 } generator = utils.FilteredGenerator(filters) base_collection = [1, 10] actual_collection = [x for x in generator.filter(base_collection)] self.assertEqual([(1, None), (10, 'div by 2; div by 5')], actual_collection)
def filter_alignments(pysam_alignments, excluded_writer=AlignWriter.NULL): filters = {'cigar unavailable': \ lambda a: a.cigarstring is None, 'mapping quality < 1': \ lambda a: a.mapping_quality < 1, 'not in proper pair': \ lambda a: a.flag & BamFlag.PROPER_PAIR == 0, 'qc failed': \ lambda a: a.flag & BamFlag.QCFAIL != 0, 'secondary alignment': \ lambda a: a.flag & BamFlag.SECONDARY != 0, 'supplementary alignment': \ lambda a: a.flag & BamFlag.SUPPLEMENTARY != 0, } generator = utils.FilteredGenerator(filters) for pysam_align, filter_value in generator.filter(pysam_alignments): connor_align = ConnorAlign(pysam_align, filter_value) if filter_value: excluded_writer.write(family=None, paired_align=None, connor_align=connor_align) else: yield connor_align
def test_filter_returnsEmptyIfBaseEmpty(self): generator = utils.FilteredGenerator({}) base_collection = [] actual_collection = [x for x in generator.filter(base_collection)] self.assertEqual([], actual_collection)