def test_open_intervals(self): assert P.to_data(P.open(-P.inf, P.inf)) == [(False, float('-inf'), float('inf'), False)] assert P.to_data(P.openclosed(-P.inf, 0)) == [(False, float('-inf'), 0, True)] assert P.to_data(P.closedopen(0, P.inf)) == [(True, 0, float('inf'), False)]
def test_identity(self): i1, i2, i3, i4 = P.closed(0, 1), P.openclosed(0, 1), P.closedopen(0, 1), P.open(0, 1) assert P.from_data(P.to_data(i2)) == i2 assert P.from_data(P.to_data(i3)) == i3 assert P.from_data(P.to_data(i4)) == i4 assert P.from_data(P.to_data(i1)) == i1
def make_POS_and_CIGAR(stitched_m): CIGAR = '' conflict = False interval_list = [] ref_and_skip_intersect = stitched_m['ref_intervals'] & stitched_m[ 'skipped_intervals'] nreads_conflict = 0 if not ref_and_skip_intersect.empty: conflict = True nreads_conflict = len(list(P.iterate(ref_and_skip_intersect, step=1))) stitched_m['skipped_intervals'] = stitched_m[ 'skipped_intervals'] - ref_and_skip_intersect interval_list = [ i for t in P.to_data(ref_and_skip_intersect) for i in t[1:-1] ] ref_tuples = [(i[1] if i[0] else i[1] + 1, i[2] if i[3] else i[2] - 1) for i in P.to_data(stitched_m['ref_intervals'])] if stitched_m['skipped_intervals'].empty: skipped_tuples = [] else: skipped_tuples = [(i[1] if i[0] else i[1] + 1, i[2] if i[3] else i[2] - 1) for i in P.to_data(stitched_m['skipped_intervals'])] if stitched_m['del_intervals'].empty: del_tuples = [] else: del_tuples = [(i[1] if i[0] else i[1] + 1, i[2] if i[3] else i[2] - 1) for i in P.to_data(stitched_m['del_intervals'])[1:-1]] POS = ref_tuples[0][0] + 1 tuple_dict = {'M': ref_tuples, 'N': skipped_tuples, 'D': del_tuples} while sum(len(t) for t in tuple_dict.values()) > 0: pos_dict = {k: v[0][0] for k, v in tuple_dict.items() if len(v) > 0} c = min(pos_dict, key=pos_dict.get) n_bases = np.int_(tuple_dict[c[0]][0][1] - tuple_dict[c[0]][0][0]) + 1 if n_bases == 0: del tuple_dict[c[0]][0] continue CIGAR += '{}{}'.format(n_bases, c[0]) del tuple_dict[c[0]][0] return POS, CIGAR, conflict, nreads_conflict, interval_list
def keys(iv): return tuple(tuple(int(e) for e in d[1:3]) for d in to_data(iv))
def test_parameters(self): i = P.openclosed(-P.inf, 4) | P.closedopen(6, P.inf) assert P.to_data(i, conv=str, pinf='highest', ninf='lowest') == [(False, 'lowest', '4', True), (True, '6', 'highest', False)]
def test_unions(self): i = P.openclosed(-P.inf, 4) | P.closedopen(6, P.inf) assert P.to_data(i) == [(False, float('-inf'), 4, True), (True, 6, float('inf'), False)]
def test_empty_interval(self): assert P.to_data(P.empty()) == [(False, float('inf'), float('-inf'), False)]
def test_singleton(self): assert P.to_data(P.singleton(0)) == [(True, 0, 0, True)]
def test_values(self): assert P.to_data(P.closed('a', 'b')) == [(True, 'a', 'b', True)] assert P.to_data(P.closed(tuple([0]), tuple([1]))) == [(True, (0,), (1,), True)]
def test_bounds(self): assert P.to_data(P.closed(0, 1)) == [(True, 0, 1, True)] assert P.to_data(P.openclosed(0, 1)) == [(False, 0, 1, True)] assert P.to_data(P.closedopen(0, 1)) == [(True, 0, 1, False)] assert P.to_data(P.open(0, 1)) == [(False, 0, 1, False)]