def assemble_cx(stmts, name): ca = CxAssembler() ca.network_name = name ca.add_statements(stmts) ca.make_model() cx_str = ca.print_cx() return cx_str
def test_set_context(): cxa = CxAssembler() cxa.add_statements([st_phos, st_dephos]) cxa.make_model() cxa.set_context('BT20_BREAST') print(cxa.cx['nodeAttributes']) assert len(cxa.cx['nodeAttributes']) == 11
def test_cited(): cxa = CxAssembler() cxa.add_statements([st_cited]) cxa.make_model() assert len(cxa.cx['citations']) == 1 assert len(cxa.cx['edgeCitations']) == 1 citation = cxa.cx['citations'][0] assert citation.get('dc:identifier') == 'pmid:12345' cid = citation.get('@id') assert cxa.cx['edgeCitations'][0]['citations'][0] == cid print(cxa.print_cx())
def assemble_cx(stmts, out_file_prefix, network_type): """Return a CX assembler.""" stmts = ac.filter_belief(stmts, 0.95) stmts = ac.filter_top_level(stmts) if network_type == 'direct': stmts = ac.filter_direct(stmts) out_file = '%s_%s.cx' % (out_file_prefix, network_type) ca = CxAssembler() ca.add_statements(stmts) model = ca.make_model() ca.save_model(out_file) return ca
def test_eidos_to_cx(): stmts = __get_stmts_from_remote_jsonld() cx = CxAssembler() # Make sure these don't error cx.add_statements(stmts) cx.make_model() test_fname = 'test_cag_to_cx.cx' try: cx.save_model(test_fname) assert os.path.exists(test_fname), "Failed to create cx file." finally: if os.path.exists(test_fname): os.remove(test_fname) return
def test_edge_attributes(): cxa = CxAssembler() cxa.add_statements([st_phos, st_dephos]) cxa.make_model() assert len(cxa.cx['edgeAttributes']) == 14
def test_gap(): cxa = CxAssembler() cxa.add_statements([st_gap]) cxa.make_model() assert len(cxa.cx['nodes']) == 2 assert len(cxa.cx['edges']) == 1
def test_act(): cxa = CxAssembler() cxa.add_statements([st_act, st_act2]) cxa.make_model() assert len(cxa.cx['nodes']) == 3 assert len(cxa.cx['edges']) == 2
def test_complex2(): cxa = CxAssembler() cxa.add_statements([st_complex2]) cxa.make_model() assert len(cxa.cx['nodes']) == 3 assert len(cxa.cx['edges']) == 5
def test_dephos(): cxa = CxAssembler() cxa.add_statements([st_phos, st_dephos]) cxa.make_model() assert len(cxa.cx['nodes']) == 3 assert len(cxa.cx['edges']) == 2
def test_make_print_model(): cxa = CxAssembler() cxa.add_statements([st_phos]) cx_str = cxa.make_model() assert cx_str
def test_supports(): cxa = CxAssembler() cxa.add_statements([st_cited]) cxa.make_model() assert len(cxa.cx['supports']) == 1 assert len(cxa.cx['edgeSupports']) == 1
def test_invalid_cited(): cxa = CxAssembler() cxa.add_statements([st_invalid_cited]) cxa.make_model() assert not cxa.cx['citations'] assert not cxa.cx['edgeCitations']
def assemble_sif(stmts, data, out_file): """Return an assembled SIF.""" # Filter for high-belief statements stmts = ac.filter_belief(stmts, 0.99) stmts = ac.filter_top_level(stmts) # Filter for Activation / Inhibition stmts_act = ac.filter_by_type(stmts, Activation) stmts_inact = ac.filter_by_type(stmts, Inhibition) stmts = stmts_act + stmts_inact # Get Ras227 and filter statments ras_genes = process_data.get_ras227_genes() #ras_genes = [x for x in ras_genes if x not in ['YAP1']] stmts = ac.filter_gene_list(stmts, ras_genes, 'all') # Get the drugs inhibiting their targets as INDRA # statements def get_drug_statements(): drug_targets = process_data.get_drug_targets() drug_stmts = [] for dn, tns in drug_targets.items(): da = Agent(dn + ':Drugs') for tn in tns: ta = Agent(tn) drug_stmt = Inhibition(da, ta) drug_stmts.append(drug_stmt) return drug_stmts drug_stmts = get_drug_statements() stmts = stmts + drug_stmts # Rewrite statements to replace genes with their corresponding # antibodies when possible stmts = rewrite_ab_stmts(stmts, data) def filter_ab_edges(st, policy='all'): st_out = [] for s in st: if policy == 'all': all_ab = True for a in s.agent_list(): if a is not None: if a.name.find('_p') == -1 and \ a.name.find('Drugs') == -1: all_ab = False break if all_ab: st_out.append(s) elif policy == 'one': any_ab = False for a in s.agent_list(): if a is not None and a.name.find('_p') != -1: any_ab = True break if any_ab: st_out.append(s) return st_out stmts = filter_ab_edges(stmts, 'all') # Get a list of the AB names that end up being covered in the prior network # This is important because other ABs will need to be taken out of the # MIDAS file to work. def get_ab_names(st): prior_abs = set() for s in st: for a in s.agent_list(): if a is not None: if a.name.find('_p') != -1: prior_abs.add(a.name) return sorted(list(prior_abs)) pkn_abs = get_ab_names(stmts) def get_drug_names(st): prior_drugs = set() for s in st: for a in s.agent_list(): if a is not None: if a.name.find('Drugs') != -1: prior_drugs.add(a.name.split(':')[0]) return sorted(list(prior_drugs)) pkn_drugs = get_drug_names(stmts) print('Boolean PKN contains these antibodies: %s' % ', '.join(pkn_abs)) # Because of a bug in CNO, # node names containing AND need to be replaced # node names containing - need to be replaced # node names starting in a digit need to be replaced # must happen before SIF assembly, but not sooner as that will drop # names from the MIDAS file def rename_nodes(st): for s in st: for a in s.agent_list(): if a is not None: if a.name.find('AND') != -1: a.name = a.name.replace('AND', 'A_ND') if a.name.find('-') != -1: a.name = a.name.replace('-', '_') if a.name[0].isdigit(): a.name = 'abc_' + a.name rename_nodes(stmts) # Make the SIF model sa = SifAssembler(stmts) sa.make_model(use_name_as_key=True) sif_str = sa.print_model() # assemble and dump a cx of the sif ca = CxAssembler() ca.add_statements(stmts) model = ca.make_model() ca.save_model('sif.cx') with open(out_file, 'wb') as fh: fh.write(sif_str.encode('utf-8')) # Make the MIDAS data file used for training the model midas_data = process_data.get_midas_data(data, pkn_abs, pkn_drugs) return sif_str