def test_boundary_metabolites(self): N = model2stoichiometric_matrix(self.model, self.s_id2i, self.r_id2i) V = get_efm_matrix([{'r1': 10, 'r2': 10, 'r3': 10}, {'r1': 10, 'r3': 10, 'r4': 10, 'r6': 10}], self.r_id2i) m = get_boundary_metabolites(N, V[:, 0]) result = {(m[self.s_id2i[m_id]], m_id) for m_id in self.s_id2i.keys() if m[self.s_id2i[m_id]]} self.assertSetEqual({(-1, 'm1_b'), (1, 'm2_b')}, result, 'Was supposed to get -1 m1_b 1 m2_b as boundary metabolites, got %s' % result)
def get_boundary_inputs_outputs(self, pathway_id): r_is = [self.r_id2i[r_id] for r_id in self.r_ids] v = self.V[r_is, self.efm_id2i[pathway_id]] bm_ids = sorted(set(self.boundary_m_ids) & self.m_ids) b_ms = get_boundary_metabolites(self.N[[self.m_id2i[m_id] for m_id in bm_ids], :][:, r_is], v) bm_id2i = dict(zip(bm_ids, range(0, len(bm_ids)))) # b_ms = get_boundary_metabolites(self.N, v) r_id2st = {m_id: -b_ms[bm_id2i[m_id]] for m_id in bm_ids if b_ms[bm_id2i[m_id]] < 0} p_id2st = {m_id: b_ms[bm_id2i[m_id]] for m_id in bm_ids if b_ms[bm_id2i[m_id]] > 0} return r_id2st, p_id2st