Skip to content

Commit

Permalink
Testing new way of representing site overlaps
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsekar committed May 9, 2017
1 parent a0ea693 commit 7e02031
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 2 deletions.
24 changes: 24 additions & 0 deletions tests/test_wc_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,30 @@ class P(bio.BooleanStateVariable):pass
self.assertEqual(rule1.operations[1].target.label,'P')
self.assertEqual([rule1.forward.expr,rule1.reverse.expr],['kf','kr'])

def test_pairwise_overlaps(self):
class a(bio.Site): pass
class b(bio.Site): pass
class M(bio.Molecule): pass

a1,b1,b2 = a(),b(),b()

a1.add_pairwise_overlaps([b1,b2])
self.assertEqual(a1.pairwise_overlaps_obj.sites,[b1,b2])
self.assertEqual(a1,b1.pairwise_overlaps_obj.sites[0])
self.assertEqual(a1,b2.pairwise_overlaps_obj.sites[0])

a1,b1,b2 = a(),b(),b()
a1.add_pairwise_overlaps([b1,b2],mutual=False)
self.assertEqual(a1.pairwise_overlaps_obj.sites,[b1,b2])
self.assertEqual(None,b1.pairwise_overlaps_obj)
self.assertEqual(None,b2.pairwise_overlaps_obj)

m1 = M()
with self.assertRaises(utils.AddObjectError): a1.add_pairwise_overlaps(m1)

def test_current(self):
print("\n\nOutput goes here\n===============\n")
print("\n===============\nOutput ends here\n")



38 changes: 36 additions & 2 deletions wc_rules/bioschema.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,26 @@ def get_boolvar(self,label,**kwargs):
return self.boolvars.get(label=label,**kwargs)
else:
return self.boolvars.get(**kwargs)

def add_pairwise_overlaps(self,sites,mutual=True):
if type(sites) is not list:
sites = [sites]
for site in sites:
if isinstance(site,(Site,)) is not True:
raise utils.AddObjectError(self,site,['Site'])
if self.pairwise_overlaps_obj is None:
self.pairwise_overlaps_obj = PairwiseOverlaps(sites=[])
self.pairwise_overlaps_obj.sites.extend(sites)
if mutual==True:
for site in sites:
if site.pairwise_overlaps_obj is None:
site.pairwise_overlaps_obj = PairwiseOverlaps(sites=[])
site.pairwise_overlaps_obj.sites.append(self)
return self

class PairwiseOverlaps(core.Model):
site = core.OneToOneAttribute(Site,related_name='pairwise_overlaps_obj')
sites = core.ManyToManyAttribute(Site,related_name='pairwise_overlaps_in')

class Bond(core.Model):
id = core.StringAttribute(primary=True,unique=True)
complex = core.ManyToOneAttribute(Complex,related_name='bonds')
Expand Down Expand Up @@ -206,7 +225,22 @@ class Phosphorylate(SetTrue): pass
class Dephosphorylate(SetFalse): pass

def main():
return
class a(Site): pass
class b(Site): pass
class M(Molecule): pass

a1 = a()
b1 = b()
b2 = b()
vec = [b1,b1,b2]
a1.add_pairwise_overlaps(vec)
print(a1.pairwise_overlaps_obj.site.__repr__())
print(a1.pairwise_overlaps_obj.sites)
for site in vec:
print([x.site for x in site.pairwise_overlaps_in])

m1 = M()
a1.add_pairwise_overlaps(m1)

if __name__ == '__main__':
main()
Expand Down

0 comments on commit 7e02031

Please sign in to comment.