1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
import gfapy
import unittest
class TestAPIReferencesVirtual(unittest.TestCase):
def test_edges_gaps_create_virtual_segments(self):
data = [
["gfa1", {"lines":["L\ta\t+\tb\t-\t*", "C\ta\t-\tb\t+\t100\t*"],
"m1":"oriented_from", "m2":"oriented_to",
"sA":"S\ta\t*", "sB":"S\tb\t*",
"collection":"edges"}],
["gfa2", {"lines":["E\t*\ta+\tb-\t0\t100\t900\t1000$\t*"],
"m1":"sid1", "m2":"sid2",
"sA":"S\ta\t1000\t*", "sB":"S\tb\t1000\t*",
"collection":"edges"}],
["gfa2", {"lines":["G\t*\ta+\tb-\t1000\t100"],
"m1":"sid1", "m2":"sid2",
"sA":"S\ta\t1000\t*", "sB":"S\tb\t1000\t*",
"collection":"gaps"}]
]
for v,values in data:
for linestr in values["lines"]:
g = gfapy.Gfa(version=v)
line = gfapy.Line(linestr)
g.append(line)
self.assertEqual(set(["a", "b"]), set([x.name for x in g.segments]))
for s in g.segments: assert(s.virtual)
sA = gfapy.Line(values["sA"])
g.append(sA)
self.assertEqual(set(["a", "b"]), set([x.name for x in g.segments]))
assert(not g.segment("a").virtual)
assert(g.segment("b").virtual)
self.assertEqual(sA, getattr(line,values["m1"]).line)
self.assertEqual(sA, g.segment("a"))
self.assertEqual([line], getattr(sA,values["collection"]))
sB = gfapy.Line(values["sB"])
g.append(sB)
self.assertEqual(set(["a", "b"]), set([x.name for x in g.segments]))
assert(not g.segment("b").virtual)
self.assertEqual(sB, getattr(line,values["m2"]).line)
self.assertEqual(sB, g.segment("b"))
self.assertEqual([line], getattr(sB,values["collection"]))
def test_fragments_create_virtual_segments(self):
g = gfapy.Gfa(version="gfa2")
fr = gfapy.Line("F\ta\tread10-\t0\t10\t990\t1000$\t*")
g.append(fr)
self.assertEqual(["a"], [x.name for x in g.segments])
assert(g.segment("a").virtual)
sA = gfapy.Line("S\ta\t1000\t*")
g.append(sA)
self.assertEqual(["a"], [x.name for x in g.segments])
assert(not g.segment("a").virtual)
self.assertEqual(sA, fr.sid)
self.assertEqual(sA, g.segment("a"))
self.assertEqual([fr], sA.fragments)
def test_paths_create_virtual_links(self):
g = gfapy.Gfa(version="gfa1")
path = gfapy.Line("P\tp1\tb+,ccc-,e+\t10M1I2M,15M")
g.append(path)
for i in path.segment_names: assert(i.line.virtual)
self.assertEqual(set(["b", "ccc", "e"]), set([x.name for x in g.segments]))
sB = gfapy.Line("S\tb\t*")
g.append(sB)
assert(not path.segment_names[0].line.virtual)
self.assertEqual(sB, path.segment_names[0].line)
self.assertEqual([path], sB.paths)
for i in path.links: assert(i.line.virtual)
l = gfapy.Line("L\tccc\t+\tb\t-\t2M1D10M")
g.append(l)
assert(not path.links[0].line.virtual)
self.assertEqual(l, path.links[0].line)
self.assertEqual([path], l.paths)
l = gfapy.Line("L\tccc\t-\te\t+\t15M")
g.append(l)
assert(not path.links[1].line.virtual)
self.assertEqual(l, path.links[1].line)
self.assertEqual([path], l.paths)
def test_ordered_groups_create_virtual_unknown_records(self):
g = gfapy.Gfa(version="gfa2")
path = gfapy.Line("O\tp1\tchildpath- b+ c- edge-")
g.append(path)
for i in path.items:
assert(i.line.virtual)
self.assertEqual("\n", i.line.record_type)
childpath = gfapy.Line("O\tchildpath\tf+ a+")
g.append(childpath)
assert(not path.items[0].line.virtual)
self.assertEqual(childpath, path.items[0].line)
self.assertEqual([path], childpath.paths)
sB = gfapy.Line("S\tb\t1000\t*")
g.append(sB)
assert(not path.items[1].line.virtual)
self.assertEqual(sB, path.items[1].line)
self.assertEqual([path], sB.paths)
edge = gfapy.Line("E\tedge\te-\tc+\t0\t100\t900\t1000$\t*")
g.append(edge)
assert(not path.items[-1].line.virtual)
self.assertEqual(edge, path.items[-1].line)
self.assertEqual([path], edge.paths)
def test_unordered_groups_create_virtual_unknown_records(self):
g = gfapy.Gfa(version="gfa2")
set = gfapy.Line("U\tset\tchildpath b childset edge")
g.append(set)
for i in set.items:
assert(i.virtual)
self.assertEqual("\n", i.record_type)
childpath = gfapy.Line("O\tchildpath\tf+ a+")
g.append(childpath)
assert(not set.items[0].virtual)
self.assertEqual(childpath, set.items[0])
self.assertEqual([set], childpath.sets)
sB = gfapy.Line("S\tb\t1000\t*")
g.append(sB)
assert(not set.items[1].virtual)
self.assertEqual(sB, set.items[1])
self.assertEqual([set], sB.sets)
childset = gfapy.Line("U\tchildset\tg edge2")
g.append(childset)
assert(not set.items[2].virtual)
self.assertEqual(childset, set.items[2])
self.assertEqual([set], childset.sets)
edge = gfapy.Line("E\tedge\te-\tc+\t0\t100\t900\t1000$\t*")
g.append(edge)
assert(not set.items[3].virtual)
self.assertEqual(edge, set.items[3])
self.assertEqual([set], edge.sets)
|