Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
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]
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
 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)
Ejemplo n.º 14
0
 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)
Ejemplo n.º 15
0
 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)
Ejemplo n.º 16
0
 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)
Ejemplo n.º 17
0
 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)
Ejemplo n.º 18
0
 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)
Ejemplo n.º 19
0
 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)
Ejemplo n.º 20
0
 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))