def test_between_0_12(self): true_segs = { (0, 1): [tskit.IdentitySegment(0.0, 1.0, 3)], (0, 2): [tskit.IdentitySegment(0.0, 1.0, 4)], } ibd_segs = ibd_segments(self.ts(), between=[[0], [1, 2]]) assert_ibd_equal(ibd_segs, true_segs)
def test_input_within(self): ibd_segs = ibd_segments(self.ts(), within=[0, 2, 3, 5]) true_segs = { (0, 2): [tskit.IdentitySegment(0.0, 1.0, 2)], (3, 5): [tskit.IdentitySegment(0.0, 1.0, 5)], } assert_ibd_equal(ibd_segs, true_segs)
def naive_ibd(ts, a, b): """ Returns the IBD segments along the genome for a and b. """ def path(tree, u, v): ret = [u] while u != v: u = tree.parent(u) ret.append(u) return ret tree = ts.first() mrca = tree.mrca(a, b) last_paths = [path(tree, a, mrca), path(tree, b, mrca)] last_mrca = mrca left = 0.0 segs = [] while tree.next(): mrca = tree.mrca(a, b) paths = [path(tree, a, mrca), path(tree, b, mrca)] if paths != last_paths: segs.append( tskit.IdentitySegment(left, tree.interval.left, last_mrca)) last_paths = paths left = tree.interval.left last_mrca = mrca segs.append(tskit.IdentitySegment(left, ts.sequence_length, last_mrca)) # Filter out segments with no mrca return [seg for seg in segs if seg.node != -1]
def test_defaults(self): ibd_segs = ibd_segments(self.ts()) true_segs = { (0, 1): [tskit.IdentitySegment(0, 5, 4), tskit.IdentitySegment(5, 10, 4)], } assert_ibd_equal(ibd_segs, true_segs)
def test_defaults(self): true_segs = { (0, 1): [tskit.IdentitySegment(0.0, 1.0, 3)], (0, 2): [tskit.IdentitySegment(0.0, 1.0, 4)], (1, 2): [tskit.IdentitySegment(0.0, 1.0, 4)], } ibd_segs = ibd_segments(self.ts(), within=[0, 1, 2]) assert_ibd_equal(ibd_segs, true_segs)
def test_basic(self): ibd_segs = ibd_segments(self.ts()) true_segs = { (0, 2): [tskit.IdentitySegment(0.0, 1.0, 2)], (1, 3): [tskit.IdentitySegment(0.0, 1.0, 3)], } assert_ibd_equal(ibd_segs, true_segs)
def test_defaults(self): ibd_segs = ibd_segments(self.ts(), within=[1, 2]) true_segs = { (1, 2): [ tskit.IdentitySegment(0.0, 0.2, 4), tskit.IdentitySegment(0.2, 1.0, 4), ], } assert_ibd_equal(ibd_segs, true_segs)
def test_basic(self): ibd_segs = ibd_segments(self.ts()) true_segs = { (0, 1): [ tskit.IdentitySegment(0.0, 0.4, 2), tskit.IdentitySegment(0.4, 1.0, 3), ] } assert_ibd_equal(ibd_segs, true_segs)
def test_defaults(self): ibd_segs = ibd_segments(self.ts()) true_segs = { (0, 1): [ tskit.IdentitySegment(0.0, 0.2, 4), tskit.IdentitySegment(0.7, 1.0, 4), tskit.IdentitySegment(0.2, 0.7, 4), ] } assert_ibd_equal(ibd_segs, true_segs)
def test_time(self): ibd_segs = ibd_segments(self.ts(), max_time=3) true_segs = { (0, 1): [tskit.IdentitySegment(0, 1, 4)], (0, 2): [tskit.IdentitySegment(0, 0.3, 4)], (0, 3): [tskit.IdentitySegment(0.3, 1, 4)], (1, 2): [tskit.IdentitySegment(0, 0.3, 4)], (1, 3): [tskit.IdentitySegment(0.3, 1, 4)], } assert_ibd_equal(ibd_segs, true_segs)
def test_basic(self): # FIXME ibd_segs = ibd_segments(self.ts(), compare_lib=False) true_segs = { (0, 1): [tskit.IdentitySegment(0.0, 1.0, 1)], (0, 2): [tskit.IdentitySegment(0.0, 1.0, 2)], (1, 2): [tskit.IdentitySegment(0.0, 1.0, 2)], } assert_ibd_equal(ibd_segs, true_segs)
def test_input_within(self): ibd_segs = ibd_segments(self.ts(), within=[0, 1, 2]) true_segs = { (0, 1): [tskit.IdentitySegment(0, 1, 4)], (0, 2): [ tskit.IdentitySegment(0, 0.3, 4), tskit.IdentitySegment(0.3, 1, 5), ], (1, 2): [ tskit.IdentitySegment(0, 0.3, 4), tskit.IdentitySegment(0.3, 1, 5), ], } assert_ibd_equal(ibd_segs, true_segs)
def test_specified_samples(self): ibd_segs = ibd_segments(self.ts(), within=[0, 1]) true_segs = { (0, 1): [ tskit.IdentitySegment(0.0, 1, 2), ] } assert_ibd_equal(ibd_segs, true_segs)
def test_time(self): ibd_segs = ibd_segments( self.ts(), max_time=1.5, compare_lib=True, ) true_segs = {(0, 1): [tskit.IdentitySegment(0.0, 1.0, 3)]} assert_ibd_equal(ibd_segs, true_segs)
def test_length(self): ibd_segs = ibd_segments(self.ts(), min_span=0.5) true_segs = { (0, 1): [tskit.IdentitySegment(0, 1, 4)], (0, 2): [tskit.IdentitySegment(0.3, 1, 5)], (0, 3): [tskit.IdentitySegment(0.3, 1, 4)], (1, 2): [tskit.IdentitySegment(0.3, 1, 5)], (1, 3): [tskit.IdentitySegment(0.3, 1, 4)], (2, 3): [tskit.IdentitySegment(0.3, 1, 5)], } (ibd_segs, true_segs)
def test_all_samples(self): # FIXME ibd_segs = ibd_segments(self.ts(), within=range(6), compare_lib=False) true_segs = { (0, 2): [tskit.IdentitySegment(0.0, 1.0, 2)], (0, 4): [tskit.IdentitySegment(0.0, 1.0, 4)], (2, 4): [tskit.IdentitySegment(0.0, 1.0, 4)], (1, 3): [tskit.IdentitySegment(0.0, 1.0, 3)], (1, 5): [tskit.IdentitySegment(0.0, 1.0, 5)], (3, 5): [tskit.IdentitySegment(0.0, 1.0, 5)], } assert_ibd_equal(ibd_segs, true_segs)
def test_within(self): true_segs = { (0, 1): [tskit.IdentitySegment(0.0, 1.0, 3)], } ibd_segs = ibd_segments(self.ts(), within=[0, 1]) assert_ibd_equal(ibd_segs, true_segs)
def test_defaults(self): ibd_segs = ibd_segments(self.ts()) true_segs = { (0, 1): [tskit.IdentitySegment(0, 1, 4)], (0, 2): [ tskit.IdentitySegment(0, 0.3, 4), tskit.IdentitySegment(0.3, 1, 5), ], (0, 3): [ tskit.IdentitySegment(0, 0.3, 5), tskit.IdentitySegment(0.3, 1, 4), ], (1, 2): [ tskit.IdentitySegment(0, 0.3, 4), tskit.IdentitySegment(0.3, 1, 5), ], (1, 3): [ tskit.IdentitySegment(0, 0.3, 5), tskit.IdentitySegment(0.3, 1, 4), ], (2, 3): [ tskit.IdentitySegment(0.3, 1, 5), tskit.IdentitySegment(0, 0.3, 5), ], } assert_ibd_equal(ibd_segs, true_segs)
def test_equal_to_length(self): ibd_segs = ibd_segments(self.ts(), min_span=0.4) true_segs = {(0, 1): [tskit.IdentitySegment(0.4, 1.0, 3)]} assert_ibd_equal(ibd_segs, true_segs)
def add_segment(self, a, b, seg): key = (a, b) if a < b else (b, a) self.segments[key].append(tskit.IdentitySegment(seg.left, seg.right, seg.node))