def test_PresentChains(self): """BasePairs PresentChains: should work on single/multiple chain(s)""" bps = BasePairs([self.a1, self.a2, self.a3, self.a4]) self.assertEqual(bps.PresentChains, ['A']) bps = BasePairs([self.a1, self.ab1]) self.assertEqualItems(bps.PresentChains, ['A', 'B']) bps = BasePairs([self.a1, self.ab1, self.ac1, self.bc1]) self.assertEqualItems(bps.PresentChains, ['A', 'B', 'C']) bps = BasePairs([self.a1, self.ab1, self.bn1]) self.assertEqualItems(bps.PresentChains, [None, 'A', 'B'])
def test_hasConflicts(self): """BasePairs hadConflicts: handle chains and residue IDs""" # no conflict b1 = BasePair(Base("A", "30", "G"), Base("A", "36", "C"), Saenger="XX") b2 = BasePair(Base("A", "31", "A"), Base("A", "35", "U"), Orientation="cis", Edges="W/W") b3 = BasePair(Base("A", "15", "G"), Base("A", "42", "C")) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), False) self.assertEqual(bps.hasConflicts(return_conflict=True), (False, None)) # conflict within chain b1 = BasePair(Base("A", "30", "G"), Base("A", "36", "C"), Saenger="XX") b2 = BasePair(Base("A", "31", "A"), Base("A", "35", "U"), Orientation="cis", Edges="W/W") b3 = BasePair(Base("A", "30", "G"), Base("A", "42", "C")) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), True) # conflict within chain -- return conflict b1 = BasePair(Base("A", "30", "G"), Base("A", "36", "C"), Saenger="XX") b2 = BasePair(Base("A", "31", "A"), Base("A", "35", "U"), Orientation="cis", Edges="W/W") b3 = BasePair(Base("A", "30", "G"), Base("A", "42", "C")) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(return_conflict=True), (True, "A 30 G")) # no conflict, same residue ID, different chain b1 = BasePair(Base("A", "30", "G"), Base("A", "36", "C"), Saenger="XX") b2 = BasePair(Base("A", "31", "A"), Base("A", "35", "U"), Orientation="cis", Edges="W/W") b3 = BasePair(Base("C", "30", "G"), Base("A", "42", "C")) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), False)
def test_hasConflicts(self): """BasePairs hadConflicts: handle chains and residue IDs""" # no conflict b1 = BasePair(Base('A','30','G'), Base('A','36','C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('A','15','G'), Base('A','42','C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), False) self.assertEqual(bps.hasConflicts(return_conflict=True), (False, None)) # conflict within chain b1 = BasePair(Base('A','30','G'), Base('A','36','C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('A','30','G'), Base('A','42','C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), True) # conflict within chain -- return conflict b1 = BasePair(Base('A','30','G'), Base('A','36','C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('A','30','G'), Base('A','42','C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(return_conflict=True),\ (True, "A 30 G")) # no conflict, same residue ID, different chain b1 = BasePair(Base('A','30','G'), Base('A','36','C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('C','30','G'), Base('A','42','C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), False)
def test_init(self): """BasePairs __init__: should work with or without Model""" # init from list bps = BasePairs([self.a1, self.a2]) self.assertTrue(bps[0] is self.a1) self.assertTrue(bps[1] is self.a2) # init from tuple bps = BasePairs((self.a1, self.a2)) self.assertTrue(bps[0] is self.a1) self.assertTrue(bps[1] is self.a2)
def test_parse_base_pairs_basic(self): """parse_base_pairs: basic input""" basic_lines =\ ['25_437, 0: 34 C-G 448 0: +/+ cis XIX',\ '26_436, 0: 35 U-A 447 0: -/- cis XX'] bp1 = BasePair(Up=Base('0','34','C','25'),\ Down=Base('0','448','G','437'),\ Edges='+/+', Orientation='cis',Conformation=None,Saenger='XIX') bp2 = BasePair(Up=Base('0','35','U','26'),\ Down=Base('0','447','A','436'),\ Edges='-/-', Orientation='cis',Conformation=None,Saenger='XX') bps = BasePairs([bp1, bp2]) obs = parse_base_pairs(basic_lines) for o, e in zip(obs, [bp1, bp2]): self.assertEqual(o, e) self.assertEqual(len(obs), 2) basic_lines =\ ['25_437, 0: 34 c-P 448 0: +/+ cis XIX',\ '26_436, 0: 35 U-X 447 0: -/- cis XX'] self.assertRaises(RnaViewParseError, parse_base_pairs, basic_lines) basic_lines =\ ['25_437, 0: 34 c-P 448 0: +/+ cis XIX',\ '26_436, 0: 35 I-A 447 0: -/- cis XX'] bp1 = BasePair(Up=Base('0','34','c','25'),\ Down=Base('0','448','P','437'),\ Edges='+/+', Orientation='cis',Conformation=None,Saenger='XIX') bp2 = BasePair(Up=Base('0','35','I','26'),\ Down=Base('0','447','A','436'),\ Edges='-/-', Orientation='cis',Conformation=None,Saenger='XX') bps = BasePairs([bp1, bp2]) obs = parse_base_pairs(basic_lines) for o, e in zip(obs, [bp1, bp2]): self.assertEqual(o, e) self.assertEqual(len(obs), 2) lines = ['1_2, : 6 G-G 7 : stacked',\ '1_16, : 6 G-C 35 : +/+ cis XIX'] bp1 = BasePair(Up=Base(' ','6','G','1'),\ Down=Base(' ','7','G','2'), Edges='stacked') bp2 = BasePair(Up=Base(' ','6','G','1'),\ Down=Base(' ','35','C','16'),\ Edges='+/+', Orientation='cis',Conformation=None,Saenger='XIX') obs = parse_base_pairs(lines) for o, e in zip(obs, [bp1, bp2]): self.assertEqual(o, e) self.assertEqual(len(obs), 2)
def test_select(self): """BasePairs select: should work with any good function""" def xx(bp): if bp.Saenger == 'XX': return True return False bps = BasePairs([self.a1, self.a2, self.a3, self.a4]) obs = bps.select(xx) self.assertEqual(len(obs), 2) self.assertTrue(obs[0] is self.a1) self.assertTrue(obs[1] is self.a2) for i in obs: self.assertEqual(i.Saenger, 'XX')
def test_select(self): """BasePairs select: should work with any good function""" def xx(bp): if bp.Saenger == "XX": return True return False bps = BasePairs([self.a1, self.a2, self.a3, self.a4]) obs = bps.select(xx) self.assertEqual(len(obs), 2) self.failUnless(obs[0] is self.a1) self.failUnless(obs[1] is self.a2) for i in obs: self.assertEqual(i.Saenger, "XX")
def setUp(self): """setUp method for all BasePairs tests""" self.a1 = BasePair(Base('A', '30', 'G'), Base('A', '36', 'C'), Saenger='XX') self.a2 = BasePair(Base('A', '31', 'A'), Base('A', '35', 'U'), Saenger='XX') self.a3 = BasePair(Base('A', '40', 'G'), Base('A', '60', 'U'), Saenger='V') self.a4 = BasePair(Base('A','41','A'), Base('A','58','U'),\ Saenger=None) self.ab1 = BasePair(Base('A', '41', 'A'), Base('B', '58', 'U')) self.ac1 = BasePair(Base('A', '10', 'C'), Base('C', '3', 'G')) self.bc1 = BasePair(Base('B', '41', 'A'), Base('C', '1', 'U')) self.bn1 = BasePair(Base('B', '41', 'A'), Base(None, '1', 'U')) self.cd1 = BasePair(Base('C', '41', 'A'), Base('D', '1', 'U')) self.bp1 = BasePair(Base('A', '34', 'U'), Base('A', '40', 'A')) self.bp2 = BasePair(Base('A', '35', 'C'), Base('A', '39', 'G')) self.bp3 = BasePair(Base('B', '32', 'G'), Base('B', '38', 'U')) self.bp4 = BasePair(Base('B', '33', 'G'), Base('B', '37', 'C')) self.bp5 = BasePair(Base('A', '31', 'C'), Base('B', '41', 'G')) self.bp6 = BasePair(Base('A', '32', 'U'), Base('B', '40', 'A')) self.bp7 = BasePair(Base('A', '37', 'U'), Base('B', '35', 'A')) self.pairs = BasePairs([self.bp1, self.bp2, self.bp3, self.bp4,\ self.bp5, self.bp6, self.bp7])
def test_str(self): """BasePairs __str__: should produce expected string""" b1 = BasePair(Base('A', '30', 'G'), Base('A', '36', 'C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') bps = BasePairs([b1, b2]) exp_lines = [ "===================================================================",\ "Bases: Up -- Down; Annotation: Edges -- Orient. -- Conf. -- Saenger",\ "===================================================================",\ "Bases: A 30 G -- A 36 C; Annotation: None -- None -- None -- XX;",\ "Bases: A 31 A -- A 35 U; Annotation: W/W -- cis -- None -- None;"] self.assertEqual(str(bps), '\n'.join(exp_lines))
def test_cliques(self): """BasePairs cliques: single/multiple chains and cliques""" #one chain, one clique bps = BasePairs([self.a1, self.a2, self.a3, self.a4]) obs_cl = list(bps.cliques()) self.assertEqual(len(obs_cl), 1) #3 chains, 2 cliques bps = BasePairs([self.a1, self.a2, self.cd1]) obs_cl = list(bps.cliques()) self.assertEqual(len(obs_cl), 2) self.assertEqual(len(obs_cl[0]), 2) self.assertEqual(len(obs_cl[1]), 1) self.failUnless(obs_cl[1][0] is self.cd1) self.assertEqual(obs_cl[1].PresentChains, ['C','D']) #5 chains, 1 clique bps = BasePairs([self.a1, self.ab1, self.bc1, self.bn1, self.cd1]) obs_cl = list(bps.cliques()) self.assertEqual(len(obs_cl), 1) self.assertEqual(len(obs_cl[0]), 5) self.failUnless(obs_cl[0][0] is self.a1) self.assertEqualItems(obs_cl[0].PresentChains, ['A','B','C','D', None])
def test_cliques(self): """BasePairs cliques: single/multiple chains and cliques""" # one chain, one clique bps = BasePairs([self.a1, self.a2, self.a3, self.a4]) obs_cl = list(bps.cliques()) self.assertEqual(len(obs_cl), 1) # 3 chains, 2 cliques bps = BasePairs([self.a1, self.a2, self.cd1]) obs_cl = list(bps.cliques()) self.assertEqual(len(obs_cl), 2) self.assertEqual(len(obs_cl[0]), 2) self.assertEqual(len(obs_cl[1]), 1) self.failUnless(obs_cl[1][0] is self.cd1) self.assertEqual(obs_cl[1].PresentChains, ["C", "D"]) # 5 chains, 1 clique bps = BasePairs([self.a1, self.ab1, self.bc1, self.bn1, self.cd1]) obs_cl = list(bps.cliques()) self.assertEqual(len(obs_cl), 1) self.assertEqual(len(obs_cl[0]), 5) self.failUnless(obs_cl[0][0] is self.a1) self.assertEqualItems(obs_cl[0].PresentChains, ["A", "B", "C", "D", None])
def test_hasConflicts(self): """BasePairs hadConflicts: handle chains and residue IDs""" # no conflict b1 = BasePair(Base('A', '30', 'G'), Base('A', '36', 'C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('A', '15', 'G'), Base('A', '42', 'C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), False) self.assertEqual(bps.hasConflicts(return_conflict=True), (False, None)) # conflict within chain b1 = BasePair(Base('A', '30', 'G'), Base('A', '36', 'C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('A', '30', 'G'), Base('A', '42', 'C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), True) # conflict within chain -- return conflict b1 = BasePair(Base('A', '30', 'G'), Base('A', '36', 'C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('A', '30', 'G'), Base('A', '42', 'C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(return_conflict=True),\ (True, "A 30 G")) # no conflict, same residue ID, different chain b1 = BasePair(Base('A', '30', 'G'), Base('A', '36', 'C'), Saenger='XX') b2 = BasePair(Base('A','31','A'), Base('A','35','U'),\ Orientation='cis',Edges='W/W') b3 = BasePair(Base('C', '30', 'G'), Base('A', '42', 'C')) bps = BasePairs([b1, b2, b3]) self.assertEqual(bps.hasConflicts(), False)