def test_predict_compound_pairs(self): """Test prediction of HEX1 reaction.""" reaction = parse_reaction( 'atp[c] + glc-D[c] => adp[c] + g6p[c] + h[c]') formulas = { 'atp': Formula.parse('C10H12N5O13P3'), 'adp': Formula.parse('C10H12N5O10P2'), 'glc-D': Formula.parse('C6H12O6'), 'g6p': Formula.parse('C6H11O9P'), 'h': Formula.parse('H'), } transfer, balance = findprimarypairs.predict_compound_pairs( reaction, formulas) self.assertEqual(balance, {}) self.assertEqual(transfer, { ((Compound('atp', 'c'), 1), (Compound('adp', 'c'), 1)): Formula.parse('C10H12N5O10P2'), ((Compound('glc-D', 'c'), 1), (Compound('g6p', 'c'), 1)): Formula.parse('C6H11O6'), ((Compound('atp', 'c'), 1), (Compound('g6p', 'c'), 1)): Formula.parse('O3P'), ((Compound('glc-D', 'c'), 1), (Compound('h', 'c'), 1)): Formula.parse('H'), })
def test_predict_compound_pairs_multiple(self): """Test prediction of reaction with multiple instances.""" reaction = parse_reaction( 'a[c] <=> (2) b[c] + c[c]') formulas = { 'a': Formula.parse('C10H13O6'), 'b': Formula.parse('C5H6O3'), 'c': Formula.parse('H'), } transfer, balance = findprimarypairs.predict_compound_pairs( reaction, formulas) self.assertEqual(balance, {}) self.assertEqual(transfer, { ((Compound('a', 'c'), 1), (Compound('b', 'c'), 1)): Formula.parse('C5H6O3'), ((Compound('a', 'c'), 1), (Compound('b', 'c'), 2)): Formula.parse('C5H6O3'), ((Compound('a', 'c'), 1), (Compound('c', 'c'), 1)): Formula.parse('H'), })
def test_predict_compound_pairs_unbalanced(self): """Test prediction of (non-sense) unbalanced reaction.""" reaction = parse_reaction( 'a[c] <=> b[c] + c[c]') formulas = { 'a': Formula.parse('C10H12'), 'b': Formula.parse('C9H11'), 'c': Formula.parse('CO2'), } transfer, balance = findprimarypairs.predict_compound_pairs( reaction, formulas) self.assertEqual(balance, { (Compound('a', 'c'), 1): Formula.parse('H'), (Compound('c', 'c'), 1): Formula.parse('O2'), }) self.assertEqual(transfer, { ((Compound('a', 'c'), 1), (Compound('b', 'c'), 1)): Formula.parse('C9H11'), ((Compound('a', 'c'), 1), (Compound('c', 'c'), 1)): Formula.parse('C'), })
def test_predict_compound_pairs_ambig(self): """Test prediction of (non-sense) ambiguous reaction.""" reaction = parse_reaction('a[c] + b[c] => c[c] + d[c]') formulas = { 'a': Formula.parse('C10H10'), 'b': Formula.parse('C10H10'), 'c': Formula.parse('C10H10'), 'd': Formula.parse('C10H10') } transfer, balance, ambiguous_pairs = findprimarypairs.predict_compound_pairs( reaction, formulas) all_perm = set(set(permutations(list(ambiguous_pairs)[0]))) ambig = list(ambiguous_pairs)[0] self.assertEqual(balance, {}) self.assertEqual( transfer, { ((Compound('b', 'c'), 1), (Compound('d', 'c'), 1)): Formula.parse('C10H10'), ((Compound('a', 'c'), 1), (Compound('c', 'c'), 1)): Formula.parse('C10H10') }) self.assertEqual(ambig, ambig if ambig in all_perm else set())