def test_distance_based_on_molecular_formula(): assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=False), 0) assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=True), 0) assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=False), 58.0) assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=True), 0.6590909090909091)
def test_distance_based_on_molecular_formula(): assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=False), 0 ) assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=True), 0 ) assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=False), 58.0 ) assert_equal( distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=True), 0.6590909090909091, )
def test_distance_based_on_molecular_formula( self): # from network_analysis.util met1 = Metabolite("H2O", formula="H2O") met2 = Metabolite("H2O2", formula="H2O2") met3 = Metabolite("C6H12O6", formula="C6H12O6") self.assertEqual( distance_based_on_molecular_formula(met1, met2, normalize=False), 1) self.assertEqual( distance_based_on_molecular_formula(met1, met2, normalize=True), 1. / 7) self.assertEqual( distance_based_on_molecular_formula(met2, met3, normalize=False), 20) self.assertEqual( distance_based_on_molecular_formula(met2, met3, normalize=True), 20. / 28) self.assertEqual( distance_based_on_molecular_formula(met1, met3, normalize=False), 21) self.assertEqual( distance_based_on_molecular_formula(met1, met3, normalize=True), 21. / 27)
def reactions_to_network(reactions, max_distance=0.3): """Convert a list of reactions into a networkx graph. Parameters ---------- reactions : list The list of reactions. max_distance : float, optional A threshold on the normalized distance between two compounds. If distance is above this threshold, no edge between those compounds will be created. Returns ------- networkx.MultiDiGraph See Also -------- distance_based_on_molecular_formula """ edges = list() for reaction in reactions: substrates = list(reaction.reactants) for substrate in substrates: products = list(reaction.products) for product in products: try: distance = distance_based_on_molecular_formula( substrate, product, normalize=True) except ValueError: distance = 0. if distance <= max_distance: if reaction.reversibility: edges.append( (product, substrate, dict(reaction=reaction))) edges.append( (substrate, product, dict(reaction=reaction))) elif reaction.lower_bound > 0: edges.append( (substrate, product, dict(reaction=reaction))) else: edges.append( (product, substrate, dict(reaction=reaction))) multi_graph = nx.MultiDiGraph(edges) return multi_graph
def test_distance_based_on_molecular_formula(self): # from network_analysis.util met1 = Metabolite("H2O", formula="H2O") met2 = Metabolite("H2O2", formula="H2O2") met3 = Metabolite("C6H12O6", formula="C6H12O6") assert distance_based_on_molecular_formula(met1, met2, normalize=False) == 1 assert distance_based_on_molecular_formula(met1, met2, normalize=True) == 1. / 7 assert distance_based_on_molecular_formula(met2, met3, normalize=False) == 20 assert distance_based_on_molecular_formula(met2, met3, normalize=True) == 20. / 28 assert distance_based_on_molecular_formula(met1, met3, normalize=False) == 21 assert distance_based_on_molecular_formula(met1, met3, normalize=True) == 21. / 27
def test_distance_based_on_molecular_formula(self): # from network_analysis.util met1 = Metabolite("H2O", formula="H2O") met2 = Metabolite("H2O2", formula="H2O2") met3 = Metabolite("C6H12O6", formula="C6H12O6") self.assertEqual(distance_based_on_molecular_formula(met1, met2, normalize=False), 1) self.assertEqual(distance_based_on_molecular_formula(met1, met2, normalize=True), 1. / 7) self.assertEqual(distance_based_on_molecular_formula(met2, met3, normalize=False), 20) self.assertEqual(distance_based_on_molecular_formula(met2, met3, normalize=True), 20. / 28) self.assertEqual(distance_based_on_molecular_formula(met1, met3, normalize=False), 21) self.assertEqual(distance_based_on_molecular_formula(met1, met3, normalize=True), 21. / 27)
def reactions_to_network(reactions, max_distance=0.3): """Convert a list of reactions into a networkx graph. Parameters ---------- reactions : list The list of reactions. max_distance : float, optional A threshold on the normalized distance between two compounds. If distance is above this threshold, no edge between those compounds will be created. Returns ------- networkx.MultiDiGraph See Also -------- distance_based_on_molecular_formula """ edges = list() for reaction in reactions: substrates = list(reaction.reactants) for substrate in substrates: products = list(reaction.products) for product in products: try: distance = distance_based_on_molecular_formula(substrate, product, normalize=True) except ValueError: distance = 0. if distance <= max_distance: if reaction.reversibility: edges.append((product, substrate, dict(reaction=reaction))) edges.append((substrate, product, dict(reaction=reaction))) elif reaction.lower_bound > 0: edges.append((substrate, product, dict(reaction=reaction))) else: edges.append((product, substrate, dict(reaction=reaction))) multi_graph = nx.MultiDiGraph(edges) return multi_graph