Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
end=6,
focal_sites=[4],
time=2,
haplotype=[-1, -1, -1, 0, 1, 0][3:6],
)
ancestor_data.add_ancestor( # ID 4
start=0,
end=6,
focal_sites=[0, 1, 3, 5],
time=1,
haplotype=[1, 1, 1, 1, 1, 1],
)
ancestor_data.finalise()
expected_edges = [
tskit.Edge(0, 6, 0, 1),
tskit.Edge(0, 3, 2, 4),
tskit.Edge(3, 6, 3, 4),
tskit.Edge(3, 6, 1, 3),
tskit.Edge(0, 3, 1, 2),
]
self.verify_edges(sample_data, ancestor_data, expected_edges)
def edge_diffs(self):
M = self._tree_sequence.get_num_edges()
sequence_length = self._tree_sequence.get_sequence_length()
edges = [tskit.Edge(*self._tree_sequence.get_edge(j)) for j in range(M)]
time = [self._tree_sequence.get_node(edge.parent)[1] for edge in edges]
in_order = sorted(range(M), key=lambda j: (
edges[j].left, time[j], edges[j].parent, edges[j].child))
out_order = sorted(range(M), key=lambda j: (
edges[j].right, -time[j], -edges[j].parent, -edges[j].child))
j = 0
k = 0
left = 0
while j < M or left < sequence_length:
e_out = []
e_in = []
while k < M and edges[out_order[k]].right == left:
h = out_order[k]
e_out.append(edges[h])
k += 1
while j < M and edges[in_order[j]].left == left:
time=2,
haplotype=[-1, -1, -1, 0, 1, 0, 1][3:7],
)
ancestor_data.add_ancestor( # ID 4
start=0,
end=7,
focal_sites=[0, 1, 3, 5],
time=1,
haplotype=[1, 1, 1, 1, 1, 1, 1],
)
ancestor_data.finalise()
expected_edges = [
tskit.Edge(0, 7, 0, 1),
tskit.Edge(0, 3, 2, 4),
tskit.Edge(3, 7, 3, 4),
tskit.Edge(3, 7, 1, 3),
tskit.Edge(0, 3, 1, 2),
]
self.verify_edges(sample_data, ancestor_data, expected_edges)
time=2,
haplotype=[0, 1, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1][0:4],
)
ancestor_data.add_ancestor( # ID 7
start=0,
end=12,
focal_sites=[0, 2, 4, 6, 8, 10],
time=1,
haplotype=[1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0],
)
ancestor_data.finalise()
expected_edges = [
tskit.Edge(0, 12, 0, 1),
tskit.Edge(0, 4, 1, 2),
tskit.Edge(4, 12, 1, 3),
tskit.Edge(8, 12, 1, 4),
tskit.Edge(4, 8, 1, 5),
tskit.Edge(0, 4, 1, 6),
tskit.Edge(0, 5, 1, 7),
tskit.Edge(5, 8, 5, 7),
tskit.Edge(8, 12, 1, 7),
]
self.verify_edges(sample_data, ancestor_data, expected_edges)
haplotype=[0, 1, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1][0:4],
)
ancestor_data.add_ancestor( # ID 7
start=0,
end=12,
focal_sites=[0, 2, 4, 6, 8, 10],
time=1,
haplotype=[1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0],
)
ancestor_data.finalise()
expected_edges = [
tskit.Edge(0, 12, 0, 1),
tskit.Edge(0, 4, 1, 2),
tskit.Edge(4, 12, 1, 3),
tskit.Edge(8, 12, 1, 4),
tskit.Edge(4, 8, 1, 5),
tskit.Edge(0, 4, 1, 6),
tskit.Edge(0, 5, 1, 7),
tskit.Edge(5, 8, 5, 7),
tskit.Edge(8, 12, 1, 7),
]
self.verify_edges(sample_data, ancestor_data, expected_edges)
)
ancestor_data.add_ancestor( # ID 4
start=0,
end=6,
focal_sites=[0, 1, 3, 5],
time=1,
haplotype=[1, 1, 1, 1, 1, 1],
)
ancestor_data.finalise()
expected_edges = [
tskit.Edge(0, 6, 0, 1),
tskit.Edge(0, 3, 2, 4),
tskit.Edge(3, 6, 3, 4),
tskit.Edge(3, 6, 1, 3),
tskit.Edge(0, 3, 1, 2),
]
self.verify_edges(sample_data, ancestor_data, expected_edges)
ancestor_data.add_ancestor( # ID 7
start=0,
end=12,
focal_sites=[0, 2, 4, 6, 8, 10],
time=1,
haplotype=[1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0],
)
ancestor_data.finalise()
expected_edges = [
tskit.Edge(0, 12, 0, 1),
tskit.Edge(0, 4, 1, 2),
tskit.Edge(4, 12, 1, 3),
tskit.Edge(8, 12, 1, 4),
tskit.Edge(4, 8, 1, 5),
tskit.Edge(0, 4, 1, 6),
tskit.Edge(0, 5, 1, 7),
tskit.Edge(5, 8, 5, 7),
tskit.Edge(8, 12, 1, 7),
]
self.verify_edges(sample_data, ancestor_data, expected_edges)
edge.right,
edge.parent,
):
match = self.path_index.peekitem(index)[1]
matches.append((edge, match))
condition = (
edge.left == last_match.right and match.child == last_match.child
)
if not condition:
contig_offsets.append(len(matches) - 1)
last_match = match
edge = edge.next
contig_offsets.append(len(matches))
# FIXME This is just to check the contig finding code above. Remove.
contiguous_matches = [[(None, tskit.Edge(-1, -1, -1, -1))]] # Sentinel
for edge, match in matches:
condition = (
edge.left == contiguous_matches[-1][-1][1].right
and match.child == contiguous_matches[-1][-1][1].child
)
if condition:
contiguous_matches[-1].append((edge, match))
else:
contiguous_matches.append([(edge, match)])
other_matches = [None]
for j in range(len(contig_offsets) - 1):
contigs = matches[contig_offsets[j] : contig_offsets[j + 1]]
other_matches.append(contigs)
assert len(other_matches) == len(contiguous_matches)
for c1, c2 in zip(contiguous_matches[1:], other_matches[1:]):
assert c1 == c2