Esempio n. 1
0
 def testAddMultiMultiReaction(self):
   if IGNORE_TEST:
     return
   m3 = MESGraph(self.simple3)
   v2 = self.simple3.getReaction(V2)
   m3.addMultiMultiReaction(v2)
   self.assertTrue(v2 in m3.multimulti_reactions)
Esempio n. 2
0
 def testCheckTypeThreeError(self):
   if IGNORE_TEST:
     return
   m3 = MESGraph(self.simple3)
   v1 = self.simple3.getReaction(V1)
   v2 = self.simple3.getReaction(V2)
   v3 = self.simple3.getReaction(V3)
   m3.processUniUniReaction(v1)
   adp = m3.getNode(self.simple3.getMolecule(ADP))
   atp = m3.getNode(self.simple3.getMolecule(ATP))
   self.assertFalse(m3.checkTypeThreeError(adp, atp, v3))
   m3.processUniMultiReaction(v3) 
   self.assertTrue(m3.checkTypeThreeError(adp, atp, v2))
   self.assertTrue(m3.checkTypeThreeError(atp, adp, v2))
Esempio n. 3
0
 def setUp(self):
   # SimpleSBML with type I error
   self.simple = SimpleSBML()
   self.simple.initialize(cn.TEST_FILE6)
   # SimpleSBML with type II error
   self.simple2 = SimpleSBML()
   self.simple2.initialize(cn.TEST_FILE7)
   # SimpleSBML for type III error
   self.simple3 = SimpleSBML()
   self.simple3.initialize(cn.TEST_FILE10)
   # SimpleSBML for type IV error
   self.simple4 = SimpleSBML()
   self.simple4.initialize(cn.TEST_FILE11)
   # simple5 for type V error    
   self.simple5 = SimpleSBML()
   self.simple5.initialize(cn.TEST_FILE12)
   # simple6 will test multi-multi model with no errors
   self.simple6 = SimpleSBML()
   self.simple6.initialize(cn.TEST_FILE3)
   self.mesgraph = MESGraph(self.simple)
Esempio n. 4
0
 def testCheckTypeTwoError(self):
   if IGNORE_TEST:
     return
   mesgraph2 = MESGraph(self.simple2)
   mesgraph2.processUniUniReaction(self.simple2.getReaction(REACTION1))
   mesgraph2.processMultiUniReaction(self.simple2.getReaction(REACTION2))
   mesgraph2.processMultiUniReaction(self.simple2.getReaction(REACTION3))
   self.assertTrue(mesgraph2.checkTypeTwoError())
   self.assertFalse(len(mesgraph2.type_one_errors)>0)
   self.assertTrue(len(mesgraph2.type_two_errors)>0)
Esempio n. 5
0
 def testAddTypeThreeError(self):
   if IGNORE_TEST:
     return
   m3 = MESGraph(self.simple3)
   v1 = self.simple3.getReaction(V1)
   v2 = self.simple3.getReaction(V2)
   v3 = self.simple3.getReaction(V3)
   m3.processUniUniReaction(v1)
   m3.processUniMultiReaction(v3)
   amp = m3.getNode(self.simple3.getMolecule(AMP))
   atp = m3.getNode(self.simple3.getMolecule(ATP))
   self.assertTrue(m3.addTypeThreeError(amp, atp, v2))
   self.assertTrue(len(m3.type_three_errors), 1)
   error = m3.type_three_errors[0]
   self.assertEqual(error.node1, amp)
   self.assertEqual(error.node2, atp)
   self.assertEqual(error.reactions, [v2.label])
Esempio n. 6
0
 def testReduceReaction(self):
   if IGNORE_TEST:
     return
   m4 = MESGraph(self.simple4)
   atpase = m4.simple.getReaction(ATPASE)
   lower = m4.simple.getReaction(LOWER)
   self.assertFalse(m4.reduceReaction(atpase))
   m4.processUniUniReaction(atpase)
   reduced_reaction = m4.reduceReaction(lower)
   self.assertEqual(type(reduced_reaction), Reaction)
   self.assertEqual(len(reduced_reaction.reactants), 1)
   self.assertEqual(reduced_reaction.products, [])   
   self.assertEqual(reduced_reaction.reactants[0].molecule.name, FRU16P2)
Esempio n. 7
0
 def testMergeNodes(self):
   if IGNORE_TEST:
     return
   m3 = MESGraph(self.simple3)
   v1_reaction = self.simple3.getReaction(V1)
   v2_reaction = self.simple3.getReaction(V2)
   amp_molecule = self.simple3.getMolecule(AMP)
   adp_molecule = self.simple3.getMolecule(ADP)
   atp_molecule = self.simple3.getMolecule(ATP)
   amp_som = m3.getNode(amp_molecule)
   adp_som = m3.getNode(adp_molecule)
   atp_som = m3.getNode(atp_molecule)
   ampatp_som = m3.mergeNodes(amp_som, atp_som, v1_reaction)
   self.assertTrue(amp_molecule in ampatp_som.molecules)
   self.assertTrue(atp_molecule in ampatp_som.molecules)
   self.assertTrue(ampatp_som in m3.nodes)
   # tests if anohter merge will remove previous nodes
   ampadpatp_som = m3.mergeNodes(ampatp_som, adp_som, v2_reaction)
   self.assertFalse(ampatp_som in m3.nodes)
   self.assertFalse(adp_som in m3.nodes)  
   self.assertTrue(ampadpatp_som in m3.nodes)
Esempio n. 8
0
class TestMESGraph(unittest.TestCase):

  def setUp(self):
    # SimpleSBML with type I error
    self.simple = SimpleSBML()
    self.simple.initialize(cn.TEST_FILE6)
    # SimpleSBML with type II error
    self.simple2 = SimpleSBML()
    self.simple2.initialize(cn.TEST_FILE7)
    # SimpleSBML for type III error
    self.simple3 = SimpleSBML()
    self.simple3.initialize(cn.TEST_FILE10)
    # SimpleSBML for type IV error
    self.simple4 = SimpleSBML()
    self.simple4.initialize(cn.TEST_FILE11)
    # simple5 for type V error    
    self.simple5 = SimpleSBML()
    self.simple5.initialize(cn.TEST_FILE12)
    # simple6 will test multi-multi model with no errors
    self.simple6 = SimpleSBML()
    self.simple6.initialize(cn.TEST_FILE3)
    self.mesgraph = MESGraph(self.simple)
  
  def testConstructor(self):
    if IGNORE_TEST:
      return
    self.assertEqual(len(self.mesgraph.nodes), INITIAL_NODES)
    self.assertEqual(len(self.mesgraph.edges), INITIAL_EDGES)
    dfg = self.simple.getMolecule(DFG)
    # molecules is a list of one-molecule sets
    molecules = [som.molecules for som in self.mesgraph.nodes]
    self.assertTrue({self.simple.getMolecule(DFG)} in molecules)
    self.assertEqual(len(self.mesgraph.type_one_errors), 0)
    self.assertEqual(len(self.mesgraph.type_two_errors), 0)
    self.assertEqual(len(self.mesgraph.type_three_errors), 0)
    self.assertEqual(len(self.mesgraph.type_four_errors), 0)
    self.assertEqual(len(self.mesgraph.type_five_errors), 0)

  def testInitializeSOMs(self):
    if IGNORE_TEST:
      return
    for node in self.mesgraph.nodes:
      self.assertEqual(type(node), SOM)
  
  def testMakeId(self):
    if IGNORE_TEST:
      return
    identifier = ""
    for key, som in enumerate(self.mesgraph.nodes):
      identifier = identifier + som.identifier
      if key < len(self.mesgraph.nodes)-1:
        identifier = identifier + ";"
    self.assertEqual(identifier, self.mesgraph.identifier)

  def testGetNode(self):
    if IGNORE_TEST:
      return
    aa = self.simple.getMolecule(AA)
    aa_node = self.mesgraph.getNode(aa)
    self.assertEqual(type(aa_node), SOM)
    self.assertEqual(aa_node.molecules, {aa})
  
  def testMergeNodes(self):
    if IGNORE_TEST:
      return
    m3 = MESGraph(self.simple3)
    v1_reaction = self.simple3.getReaction(V1)
    v2_reaction = self.simple3.getReaction(V2)
    amp_molecule = self.simple3.getMolecule(AMP)
    adp_molecule = self.simple3.getMolecule(ADP)
    atp_molecule = self.simple3.getMolecule(ATP)
    amp_som = m3.getNode(amp_molecule)
    adp_som = m3.getNode(adp_molecule)
    atp_som = m3.getNode(atp_molecule)
    ampatp_som = m3.mergeNodes(amp_som, atp_som, v1_reaction)
    self.assertTrue(amp_molecule in ampatp_som.molecules)
    self.assertTrue(atp_molecule in ampatp_som.molecules)
    self.assertTrue(ampatp_som in m3.nodes)
    # tests if anohter merge will remove previous nodes
    ampadpatp_som = m3.mergeNodes(ampatp_som, adp_som, v2_reaction)
    self.assertFalse(ampatp_som in m3.nodes)
    self.assertFalse(adp_som in m3.nodes)  
    self.assertTrue(ampadpatp_som in m3.nodes)

  def testProcessUniUniReaction(self):
    if IGNORE_TEST:
      return
    self.mesgraph.processUniUniReaction(
        self.simple.reactions[UNIUNI0])
    dfg = self.mesgraph.getNode(self.simple.getMolecule(DFG))
    e1 = self.mesgraph.getNode(self.simple.getMolecule(E1))
    self.assertTrue(self.mesgraph.has_node(dfg))
    self.assertTrue(self.mesgraph.has_node(e1))
    self.assertEqual(dfg, e1)
  
  def testProcessUniMultiReaction(self):
    if IGNORE_TEST:
      return
    unimulti_reaction = self.simple.reactions[UNIMULTI]
    self.mesgraph.processUniMultiReaction(unimulti_reaction)
    prods = [self.mesgraph.getNode(product.molecule) for product in unimulti_reaction.products]
    dfg = self.mesgraph.getNode(self.simple.getMolecule(DFG))
    for prod in prods:
      self.assertTrue(self.mesgraph.has_edge(prod, dfg))
  
  def testProcessMultiUniReaction(self):
    if IGNORE_TEST:
      return
    multiuni_reaction = self.simple.reactions[MULTIUNI]
    self.mesgraph.processMultiUniReaction(multiuni_reaction)
    reacts = [self.mesgraph.getNode(reactant.molecule) for reactant in multiuni_reaction.reactants]
    mel = self.mesgraph.getNode(self.simple.getMolecule(MEL))
    for react in reacts:
      self.assertTrue(self.mesgraph.has_edge(react, mel))
  
  def testAddMultiMultiReaction(self):
    if IGNORE_TEST:
      return
    m3 = MESGraph(self.simple3)
    v2 = self.simple3.getReaction(V2)
    m3.addMultiMultiReaction(v2)
    self.assertTrue(v2 in m3.multimulti_reactions)

  def testAddTypeThreeError(self):
    if IGNORE_TEST:
      return
    m3 = MESGraph(self.simple3)
    v1 = self.simple3.getReaction(V1)
    v2 = self.simple3.getReaction(V2)
    v3 = self.simple3.getReaction(V3)
    m3.processUniUniReaction(v1)
    m3.processUniMultiReaction(v3)
    amp = m3.getNode(self.simple3.getMolecule(AMP))
    atp = m3.getNode(self.simple3.getMolecule(ATP))
    self.assertTrue(m3.addTypeThreeError(amp, atp, v2))
    self.assertTrue(len(m3.type_three_errors), 1)
    error = m3.type_three_errors[0]
    self.assertEqual(error.node1, amp)
    self.assertEqual(error.node2, atp)
    self.assertEqual(error.reactions, [v2.label])

  def testCheckTypeThreeError(self):
    if IGNORE_TEST:
      return
    m3 = MESGraph(self.simple3)
    v1 = self.simple3.getReaction(V1)
    v2 = self.simple3.getReaction(V2)
    v3 = self.simple3.getReaction(V3)
    m3.processUniUniReaction(v1)
    adp = m3.getNode(self.simple3.getMolecule(ADP))
    atp = m3.getNode(self.simple3.getMolecule(ATP))
    self.assertFalse(m3.checkTypeThreeError(adp, atp, v3))
    m3.processUniMultiReaction(v3) 
    self.assertTrue(m3.checkTypeThreeError(adp, atp, v2))
    self.assertTrue(m3.checkTypeThreeError(atp, adp, v2))

  def testReduceReaction(self):
    if IGNORE_TEST:
      return
    m4 = MESGraph(self.simple4)
    atpase = m4.simple.getReaction(ATPASE)
    lower = m4.simple.getReaction(LOWER)
    self.assertFalse(m4.reduceReaction(atpase))
    m4.processUniUniReaction(atpase)
    reduced_reaction = m4.reduceReaction(lower)
    self.assertEqual(type(reduced_reaction), Reaction)
    self.assertEqual(len(reduced_reaction.reactants), 1)
    self.assertEqual(reduced_reaction.products, [])   
    self.assertEqual(reduced_reaction.reactants[0].molecule.name, FRU16P2)

  def testProcessMultiMultiReactions(self):
    if IGNORE_TEST:
      return
    # type III error
    m3 = MESGraph(self.simple3)
    v1 = self.simple3.getReaction(V1)
    v2 = self.simple3.getReaction(V2)
    v3 = self.simple3.getReaction(V3)
    m3.processUniUniReaction(v1)
    m3.processUniMultiReaction(v3) 
    self.assertEqual(m3.type_three_errors, [])
    self.assertTrue(m3.processMultiMultiReaction(v2))
    self.assertEqual(len(m3.type_three_errors), 1) 
    # type IV error
    m4 = MESGraph(self.simple4)
    atpase = m4.simple.getReaction(ATPASE)
    lower = m4.simple.getReaction(LOWER)
    m4.processUniUniReaction(atpase)  
    self.assertEqual(m4.type_four_errors, []) 
    self.assertTrue(m4.processMultiMultiReaction(lower))
    self.assertEqual(len(m4.type_four_errors), 1)
    # no error
    m6 = MESGraph(self.simple6)
    r5 = m6.simple.getReaction(R5)
    r12 = m6.simple.getReaction(R12)
    m6.processUniUniReaction(r12)
    ac = m6.getNode(self.simple6.getMolecule(AC))
    acp = m6.getNode(self.simple6.getMolecule(ACP))
    self.assertFalse(ac==acp)
    self.assertTrue(m6.processMultiMultiReaction(r5))
    ac = m6.getNode(self.simple6.getMolecule(AC))
    acp = m6.getNode(self.simple6.getMolecule(ACP))
    self.assertTrue(ac==acp)

  def testAddArc(self):
    if IGNORE_TEST:
      return
    source = [self.mesgraph.getNode(self.simple.getMolecule(FRU)), 
              self.mesgraph.getNode(self.simple.getMolecule(GLY))]
    destination = [self.mesgraph.getNode(self.simple.getMolecule(E2))]
    dummy_reaction = self.simple.reactions[INEQUAL2]
    self.mesgraph.addArc(source[0], destination[0], dummy_reaction)
    self.mesgraph.addArc(source[1], destination[0], dummy_reaction)
    arc1 = [source[0], destination[0]]
    arc2 = [source[1], destination[0]]
    self.assertTrue(self.mesgraph.has_edge(arc1[0], arc1[1]))
    self.assertTrue(self.mesgraph.has_edge(arc2[0], arc2[1]))
    reaction_label1 = self.mesgraph.get_edge_data(arc1[0], arc1[1])[cn.REACTION][0]
    reaction_label2 = self.mesgraph.get_edge_data(arc2[0], arc1[1])[cn.REACTION][0]
    self.assertEqual(reaction_label1, dummy_reaction.label)
    self.assertEqual(reaction_label1, reaction_label2)
  
  def testGetSOMPath(self):
    if IGNORE_TEST:
      return
    uniuni_reaction = self.simple.reactions[UNIUNI0]
    self.mesgraph.processUniUniReaction(uniuni_reaction)
    dfg = self.simple.getMolecule(DFG)
    e1 = self.simple.getMolecule(E1)
    som = self.mesgraph.getNode(dfg)
    som_path = self.mesgraph.getSOMPath(som, e1, dfg)
    self.assertEqual(type(som_path[0]), cn.PathComponents)
    self.assertEqual(som_path[0].reactions, [uniuni_reaction.label])
    self.assertEqual(len(som_path), 1)

  def testPrintSOMPath(self):
    if IGNORE_TEST:
      return
    uniuni_reaction = self.simple.reactions[UNIUNI0]
    self.mesgraph.processUniUniReaction(uniuni_reaction)
    self.assertTrue(type(self.mesgraph.printSOMPath(DFG, E1))==str)
    self.assertFalse(self.mesgraph.printSOMPath(GLY, MEL))

  def testCheckTypeOneError(self):
    if IGNORE_TEST:
      return
    uniuni_reaction1 = self.simple.reactions[UNIUNI1]
    uniuni_reaction2 = self.simple.reactions[UNIUNI2]
    inequality_reaction1 = self.simple.reactions[INEQUAL1]
    inequality_reaction2 = self.simple.reactions[INEQUAL2]
    self.mesgraph.processUniUniReaction(uniuni_reaction1)
    self.mesgraph.processUniUniReaction(uniuni_reaction2)
    aa = self.simple.getMolecule(AA)
    cn = self.simple.getMolecule(CN)
    mg = self.simple.getMolecule(MG)
    self.assertTrue(self.mesgraph.checkTypeOneError((aa, cn), inequality_reaction1))
    self.assertFalse(self.mesgraph.checkTypeOneError((mg, aa), inequality_reaction2))
    self.assertTrue(len(self.mesgraph.type_one_errors)>0)
    self.assertFalse(len(self.mesgraph.type_two_errors)>0)

  def testCheckTypeTwoError(self):
    if IGNORE_TEST:
      return
    mesgraph2 = MESGraph(self.simple2)
    mesgraph2.processUniUniReaction(self.simple2.getReaction(REACTION1))
    mesgraph2.processMultiUniReaction(self.simple2.getReaction(REACTION2))
    mesgraph2.processMultiUniReaction(self.simple2.getReaction(REACTION3))
    self.assertTrue(mesgraph2.checkTypeTwoError())
    self.assertFalse(len(mesgraph2.type_one_errors)>0)
    self.assertTrue(len(mesgraph2.type_two_errors)>0)

  def testAnalyze(self):
    if IGNORE_TEST:
      return
    mesgraph1 = MESGraph(self.simple)
    mesgraph1.analyze(self.simple.reactions)
    self.assertEqual(len(mesgraph1.nodes), FINAL_NODES)
    self.assertEqual(len(mesgraph1.edges), FINAL_EDGES)
    self.assertTrue(len(mesgraph1.type_one_errors)>0)
    self.assertFalse(len(mesgraph1.type_two_errors)>0)
    #
    mesgraph2 = MESGraph(self.simple2)
    mesgraph2.analyze(self.simple2.reactions)
    self.assertTrue(len(mesgraph2.type_one_errors)>0)
    self.assertTrue(len(mesgraph2.type_two_errors)>0)
    #
    mesgraph3 = MESGraph(self.simple3)
    mesgraph3.analyze(self.simple3.reactions) 
    self.assertTrue(len(mesgraph3.type_three_errors)>0) 
    #
    mesgraph4 = MESGraph(self.simple4)
    mesgraph4.analyze(self.simple4.reactions) 
    self.assertTrue(len(mesgraph4.type_four_errors)>0)  
    #
    # mesgraph5 = MESGraph(self.simple5)
    # mesgraph5.analyze(self.simple5.reactions) 
    # dih = mesgraph5.getNode(self.simple5.getMolecule(DIH))
    # din = mesgraph5.getNode(self.simple5.getMolecule(DIN))
    # self.assertTrue(mesgraph5.has_edge(dih, din))  
    # self.assertTrue(mesgraph5.has_edge(din, dih)) 
    # self.assertEqual(len(mesgraph5.type_five_errors), 1)
    #   
    mesgraph6 = MESGraph(self.simple6)
    mesgraph6.analyze(self.simple6.reactions) 
    total_errors = len(mesgraph6.type_one_errors) + \
                   len(mesgraph6.type_two_errors) + \
                   len(mesgraph6.type_three_errors) + \
                   len(mesgraph6.type_four_errors) +\
                   len(mesgraph6.type_five_errors) 
    self.assertTrue(total_errors==0)
Esempio n. 9
0
 def testAnalyze(self):
   if IGNORE_TEST:
     return
   mesgraph1 = MESGraph(self.simple)
   mesgraph1.analyze(self.simple.reactions)
   self.assertEqual(len(mesgraph1.nodes), FINAL_NODES)
   self.assertEqual(len(mesgraph1.edges), FINAL_EDGES)
   self.assertTrue(len(mesgraph1.type_one_errors)>0)
   self.assertFalse(len(mesgraph1.type_two_errors)>0)
   #
   mesgraph2 = MESGraph(self.simple2)
   mesgraph2.analyze(self.simple2.reactions)
   self.assertTrue(len(mesgraph2.type_one_errors)>0)
   self.assertTrue(len(mesgraph2.type_two_errors)>0)
   #
   mesgraph3 = MESGraph(self.simple3)
   mesgraph3.analyze(self.simple3.reactions) 
   self.assertTrue(len(mesgraph3.type_three_errors)>0) 
   #
   mesgraph4 = MESGraph(self.simple4)
   mesgraph4.analyze(self.simple4.reactions) 
   self.assertTrue(len(mesgraph4.type_four_errors)>0)  
   #
   # mesgraph5 = MESGraph(self.simple5)
   # mesgraph5.analyze(self.simple5.reactions) 
   # dih = mesgraph5.getNode(self.simple5.getMolecule(DIH))
   # din = mesgraph5.getNode(self.simple5.getMolecule(DIN))
   # self.assertTrue(mesgraph5.has_edge(dih, din))  
   # self.assertTrue(mesgraph5.has_edge(din, dih)) 
   # self.assertEqual(len(mesgraph5.type_five_errors), 1)
   #   
   mesgraph6 = MESGraph(self.simple6)
   mesgraph6.analyze(self.simple6.reactions) 
   total_errors = len(mesgraph6.type_one_errors) + \
                  len(mesgraph6.type_two_errors) + \
                  len(mesgraph6.type_three_errors) + \
                  len(mesgraph6.type_four_errors) +\
                  len(mesgraph6.type_five_errors) 
   self.assertTrue(total_errors==0)
Esempio n. 10
0
 def testProcessMultiMultiReactions(self):
   if IGNORE_TEST:
     return
   # type III error
   m3 = MESGraph(self.simple3)
   v1 = self.simple3.getReaction(V1)
   v2 = self.simple3.getReaction(V2)
   v3 = self.simple3.getReaction(V3)
   m3.processUniUniReaction(v1)
   m3.processUniMultiReaction(v3) 
   self.assertEqual(m3.type_three_errors, [])
   self.assertTrue(m3.processMultiMultiReaction(v2))
   self.assertEqual(len(m3.type_three_errors), 1) 
   # type IV error
   m4 = MESGraph(self.simple4)
   atpase = m4.simple.getReaction(ATPASE)
   lower = m4.simple.getReaction(LOWER)
   m4.processUniUniReaction(atpase)  
   self.assertEqual(m4.type_four_errors, []) 
   self.assertTrue(m4.processMultiMultiReaction(lower))
   self.assertEqual(len(m4.type_four_errors), 1)
   # no error
   m6 = MESGraph(self.simple6)
   r5 = m6.simple.getReaction(R5)
   r12 = m6.simple.getReaction(R12)
   m6.processUniUniReaction(r12)
   ac = m6.getNode(self.simple6.getMolecule(AC))
   acp = m6.getNode(self.simple6.getMolecule(ACP))
   self.assertFalse(ac==acp)
   self.assertTrue(m6.processMultiMultiReaction(r5))
   ac = m6.getNode(self.simple6.getMolecule(AC))
   acp = m6.getNode(self.simple6.getMolecule(ACP))
   self.assertTrue(ac==acp)