diff --git a/test/test_trajectories_parsing.py b/test/test_trajectories_parsing.py new file mode 100644 index 0000000000000000000000000000000000000000..5e2a56f2e977dea219b725d86056a31b56a143d0 --- /dev/null +++ b/test/test_trajectories_parsing.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +"""Unit tests for Python API""" + +from __future__ import unicode_literals +from __future__ import print_function + +# Library imports +from cadbiom.models.biosignal.translators.gt_visitors import compile_cond +from cadbiom.models.guard_transitions.analyser.ana_visitors import TableVisitor +from cadbiom.models.biosignal.sig_expr import * + +# Standard imports +import pytest + +@pytest.fixture() +def feed_conditions(): + + # {condition: (inhibitors, paths),} + conditions = \ + { + "((((CXCL10_CXCR3_intToMb and not(CCL11_CXCR3_intToMb)))or((CXCL10_CXCR3_intToMb and not(CXCL13_CXCR3_intToMb))))or(CXCL9_11_CXCR3_active_intToMb))or(CXCL4_CXCR3_intToMb)": ({'CCL11_CXCR3_intToMb', 'CXCL13_CXCR3_intToMb'}, [['CXCL10_CXCR3_intToMb', 'CCL11_CXCR3_intToMb'], ['CXCL10_CXCR3_intToMb', 'CXCL13_CXCR3_intToMb'], ['CXCL9_11_CXCR3_active_intToMb'], ['CXCL4_CXCR3_intToMb']]), + "((((A and not(B)))or((A and not(C))))or(D))or(E)": ({'B', 'C'}, [['A', 'B'], ['A', 'C'], ['D'], ['E']]), + "(A and not(B))": ({'B'}, [['A', 'B']]), + "(((((A)or(B))or(C))or(B))or(D))or(E)": (set(), [['A'], ['B'], ['C'], ['B'], ['D'], ['E']]), + "((((not(ATF2_JUND_macroH2A_nucl))or(Fra1_JUND_active_nucl))or(Fra1_JUN_active_nucl))or(TCF4_betacatenin_active_nucl))or(JUN_FOS_active_nucl)": ({'ATF2_JUND_macroH2A_nucl'}, [['ATF2_JUND_macroH2A_nucl'], ['Fra1_JUND_active_nucl'], ['Fra1_JUN_active_nucl'], ['TCF4_betacatenin_active_nucl'], ['JUN_FOS_active_nucl']]), + "((A and B and C)) and (not((D and E and F and G)))": ({'E', 'D', 'G', 'F'}, [['A', 'B', 'C', 'D', 'E', 'F', 'G']]), + } + + return conditions + + +def test_rec_tree(feed_conditions): + + from solution_repr import rec, Reporter + + # Error Reporter + err = Reporter() + tvi = TableVisitor(err) + symb_tab = tvi.tab_symb + + + for condition, solution in feed_conditions.items(): + inhibitors_nodes, paths = solution + + # Get tree object from condition string + cond_sexpr = compile_cond(condition, symb_tab, err) + # Get all possible paths from the condition + found_inhibitors = set() + found_paths = rec(cond_sexpr, found_inhibitors) + # print(found_inhibitors) + # print(found_paths) + + assert found_paths == paths + assert found_inhibitors == inhibitors_nodes + + +def test_parse_condition(): + + from solution_repr import parse_condition + + condition = "((((((STAT4__dimer___JUN_Cbp_active_nucl)or(JUN_FOSNFAT1_c_4_active_nucl))or((STAT5__dimer___active_active_nucl and Elf1)))or(IL2_IL2R_active_intToMb))or(JUN_FOSNFAT1_c_4_active_nucl))or(NFAT1_FOXP3))or(JUN_FOSNFAT1_c_4_active_nucl)" + inhibitors = set() + all_nodes = set(['JUN_FOSNFAT1_c_4_active_nucl', 'FOS_active_p_p_p_p_cy', 'JUN_nucl_gene', 'SRP9', 'ELK1_nucl', 'JUN_active_p_p_nucl', '14_3_3family_BAD_CaM_Ca2PLUS_CalcineurinAalpha_betaB1', 'IL2_glycosylation_exCellRegion', 'JUN_nucl', '14_3_3family', 'ERK1_2', 'STAT5_cy', 'FOS_cy', u'TGFB1__dimer___active_exCellRegion', 'NFAT1_c_4_inactive1_inactive_cy', u'SRF_nucl', 'ERK1_2_active_active_nucl', 'ERK1_2_active_active', 'ELK1_active_p_p_p_p_p_nucl', 'CaM_Ca2PLUS_CalcineurinAalpha_betaB1_active', 'FOS_cy_gene', u'PKCzeta', 'IL2Ralpha_intToMb_gene', 'IL2_IL2Ralpha_beta_gamma_JAK1_LCK_JAK3_active_intToMb', 'IL2Rgamma_JAK3_intToMb', 'STAT5__dimer___active_active_nucl', 'NFAT1_c_4_active_active_nucl', 'IL2Rbeta_JAK1_LCK_intToMb', 'SRP9_gene', 'IL2Ralpha_intToMb', 'BAD_mi', 'FOS_active_p_p_p_p_nucl']) + + + found_valid_path = parse_condition(condition, all_nodes, inhibitors) + + assert found_valid_path == set([('JUN_FOSNFAT1_c_4_active_nucl',)]) + assert inhibitors == set()