def test_mix_batch_query(self): # These are mix batch of simple and default queries queries = [message["message"] for message in self.queries] interface = TrapiInterface(query=queries, client_id='default') interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_batch_drug_wildcard_query(self): for trapi_version, queries in self.drug_batch_queries.items(): query = Query.load(trapi_version, None, query=queries[0]) interface = TrapiInterface(query=query) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_default_batch_query(self): # These are non-simple queries queries = [message["message"] for message in self.queries[2:8]] interface = TrapiInterface(query=queries, client_id='default') interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_default_survival(self): """ Test default survival """ # empty response reasoner_std = {"query_graph": dict()} # empty query graph reasoner_std["query_graph"] = {"edges": dict(), "nodes": dict()} # add in evidence gene gene1 = ('RAF1', 'ENSEMBL:ENSG00000132155') reasoner_std['query_graph']['nodes']['n0'] = { 'category': BIOLINK_GENE, 'id': '{}'.format(gene1[1]) } # add in disease node disease = ('Breast_Cancer', 'MONDO:0007254') reasoner_std['query_graph']['nodes']['n1'] = { 'category': BIOLINK_DISEASE, 'id': '{}'.format(disease[1]) } # add target survival node phenotype = ('Survival_Time', 'EFO:0000714') reasoner_std['query_graph']['nodes']['n2'] = { 'category': BIOLINK_PHENOTYPIC_FEATURE, 'id': '{}'.format(phenotype[1]), } # link genes/drugs to disease reasoner_std['query_graph']['edges']['e0'] = { 'predicate': BIOLINK_GENE_TO_DISEASE_PREDICATE, 'subject': 'n0', 'object': 'n1' } # link disease to target reasoner_std['query_graph']['edges']['e1'] = { 'predicate': BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE, 'subject': 'n1', 'object': 'n2', } # test input is TRAPI compliant validate_Message( reasoner_std ) # doesn't return True/False for some reason... Will just present exception if not compliant handler = TrapiInterface(query=reasoner_std) queries = handler.build_chp_queries() queries = handler.run_chp_queries() reasoner_std_final = handler.construct_trapi_response() # test output is TRAPI compliant validate_Message(reasoner_std_final['message']) KG = reasoner_std_final['message']['knowledge_graph'] for edge_key in KG['edges'].keys(): edge = KG['edges'][edge_key] if edge['predicate'] == BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE: p_survival = edge['attributes'][0]['value'] print("probability of survival:", p_survival)
def test_simple_single_query(self): # This is a simple query message = self.queries[1] query = message["message"] interface = TrapiInterface(query=query, client_id='default') interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_batch_drug_onehop_query(self): queries = [message["message"] for message in self.gene_queries] interface = TrapiInterface(query=queries, client_id='default', max_results=10) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_single_gene_wildcard_query(self): message = self.gene_queries[0] query = message["message"] interface = TrapiInterface(query=query, client_id='default', max_results=10) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_mix_batch_reasoner_test_queries(self): with open('query_samples/test_reasoner_coulomb_queries.pk', 'rb') as f_: _queries = pickle.load(f_) queries = [message["message"] for message in _queries] interface = TrapiInterface(query=queries, client_id='default') interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_simple_single_query(self): # This is a simple query logger.info('Running single simple query test.') for trapi_version, queries in self.queries.items(): query = Query.load(trapi_version, None, query=queries[1]) interface = TrapiInterface(query=query) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_simple_batch_query(self): # These are simple queries logger.info('Running batch simple query test.') for trapi_version, queries in self.batch_queries.items(): query = Query.load(trapi_version, None, query=queries[0]) interface = TrapiInterface(query=query) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_wildcard_batch_onehop_query(self): for trapi_version, queries in self.wildcard_batch_queries.items(): for name, query_dict in queries.items(): #if name != 'gene_to_disease_proxy_context': # continue query = Query.load(trapi_version, None, query=query_dict) interface = TrapiInterface(query=query) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_inverse_wildcard_query(self): for trapi_version, queries in self.gene_queries.items(): query = Query.load(trapi_version, None, query=queries[0]) for edge_id, edge in query.message.query_graph.edges.items(): predicate = edge.predicates[0] inverse = edge.predicates[0].get_inverse() edge.set_predicates(inverse) interface = TrapiInterface(query=query) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_no_evidence_omitting_KG_and_results(self): """ Test with no evidence, but omitting KG and Results (should be handled by handler) """ # empty response reasoner_std = { "query_graph": dict(), } # empty query graph reasoner_std["query_graph"] = {"edges": dict(), "nodes": dict()} # add in disease node disease = ('Breast_Cancer', 'MONDO:0007254') reasoner_std['query_graph']['nodes']['n0'] = { 'category': BIOLINK_DISEASE, 'id': '{}'.format(disease[1]) } # add target survival node phenotype = ('Survival_Time', 'EFO:0000714') reasoner_std['query_graph']['nodes']['n1'] = { 'category': BIOLINK_PHENOTYPIC_FEATURE, 'id': '{}'.format(phenotype[1]), } # link disease to target reasoner_std['query_graph']['edges']['e0'] = { 'predicate': BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE, 'subject': 'n0', 'object': 'n1', 'properties': { 'qualifier': '>=', 'days': 970 } } # test input is TRAPI compliant validate_Message( reasoner_std ) # doesn't return True/False for some reason... Will just present exception if not compliant handler = TrapiInterface(query=reasoner_std) queries = handler.build_chp_queries() queries = handler.run_chp_queries() reasoner_std_final = handler.construct_trapi_response() # test output is TRAPI compliant validate_Message(reasoner_std_final['message']) KG = reasoner_std_final['message']['knowledge_graph'] for edge_key in KG['edges'].keys(): edge = KG['edges'][edge_key] if edge['predicate'] == BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE: p_survival = edge['attributes'][0]['value'] print("probability of survival:", p_survival)
def test_inverse_query(self): # This is a simple query logger.info('Running default inverse query test.') for trapi_version, queries in self.queries.items(): query = Query.load(trapi_version, None, query=queries[1]) for edge_id, edge in query.message.query_graph.edges.items(): predicate = edge.predicates[0] inverse = edge.predicates[0].get_inverse() edge.set_predicates(inverse) interface = TrapiInterface(query=query) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_inverse_onehop_query(self): for trapi_version, queries in self.standard_single_queries.items(): for name, query_dict in queries.items(): #if name != 'gene_to_disease_proxy_context': # continue query = Query.load(trapi_version, None, query=query_dict) for edge_id, edge in query.message.query_graph.edges.items(): predicate = edge.predicates[0] inverse = edge.predicates[0].get_inverse() if inverse is not None: edge.set_predicates(inverse) interface = TrapiInterface(query=query) interface.build_chp_queries() interface.run_chp_queries() response = interface.construct_trapi_response()
def test_sparse_drug(self): """ queries the drug Gemzar which has a sparsity issue. Used to throw an error. Should be handled. """ # empty response reasoner_std = {"query_graph": {}} # empty query graph reasoner_std["query_graph"] = {"edges": {}, "nodes": {}} # add in evidence drug drug = ('GEMZAR', 'CHEMBL:CHEMBL888') reasoner_std['query_graph']['nodes']['n{}'.format('0')] = { 'category': BIOLINK_DRUG, 'id': '{}'.format(drug[1]) } # add in gene node (to be filled by contribution analysis reasoner_std['query_graph']['nodes']['n{}'.format('1')] = { 'category': BIOLINK_GENE, } # link genes/drugs to disease reasoner_std['query_graph']['edges']['e{}'.format(0)] = { 'predicate': BIOLINK_CHEMICAL_TO_GENE_PREDICATE, 'subject': 'n1', 'object': 'n0' } # test input is TRAPI compliant validate_Message( reasoner_std ) # doesn't return True/False for some reason... Will just present exception if not compliant handler = TrapiInterface(query=reasoner_std, max_results=2) queries = handler.build_chp_queries() queries = handler.run_chp_queries() reasoner_std_final = handler.construct_trapi_response() # test output is TRAPI compliant validate_Message(reasoner_std_final['message']) KG = reasoner_std_final["message"]['knowledge_graph'] res = reasoner_std_final["message"]['results'] res_pretty = json.dumps(reasoner_std_final, indent=2) print(res_pretty)
def test_no_gene_drug_phenotypic_evidence_with_drug_wildcard(self): """ queries with no gene/drug/survival evidence, but with drug wildcard """ # empty response reasoner_std = {"query_graph": {}} # empty query graph reasoner_std["query_graph"] = {"edges": {}, "nodes": {}} # add in gene node (to be filled by contribution analysis reasoner_std['query_graph']['nodes']['n0'] = {'category': BIOLINK_DRUG} #add in disease node disease = ('Breast_Cancer', 'MONDO:0007254') reasoner_std['query_graph']['nodes']['n1'] = { 'category': BIOLINK_DISEASE, 'id': '{}'.format(disease[1]) } # link genes/drugs to disease reasoner_std['query_graph']['edges']['e1'] = { 'predicate': BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE, 'subject': 'n0', 'object': 'n1' } # test input is TRAPI compliant validate_Message( reasoner_std ) # doesn't return True/False for some reason... Will just present exception if not compliant handler = TrapiInterface(query=reasoner_std, max_results=2) queries = handler.build_chp_queries() queries = handler.run_chp_queries() reasoner_std_final = handler.construct_trapi_response() # test output is TRAPI compliant validate_Message(reasoner_std_final['message']) KG = reasoner_std_final["message"]['knowledge_graph'] res_pretty = json.dumps(reasoner_std_final, indent=2) print(res_pretty)
def test_gene(self): """ queries TP53. Should return 2 drugs. """ # empty response reasoner_std = {"query_graph": dict()} # empty query graph reasoner_std["query_graph"] = {"edges": {}, "nodes": {}} # add in evidence drug reasoner_std['query_graph']['nodes']['n{}'.format('0')] = { 'category': BIOLINK_DRUG } # add in gene node (to be filled by contribution analysis reasoner_std['query_graph']['nodes']['n{}'.format('1')] = { 'category': BIOLINK_GENE, 'id': 'ENSEMBL:ENSG00000141510', } # link genes/drugs to disease reasoner_std['query_graph']['edges']['e{}'.format(0)] = { 'predicate': BIOLINK_CHEMICAL_TO_GENE_PREDICATE, 'subject': 'n0', 'object': 'n1' } # test input is TRAPI compliant validate_Message( reasoner_std ) # doesn't return True/False for some reason... Will just present exception if not compliant handler = TrapiInterface(query=reasoner_std, max_results=2) queries = handler.build_chp_queries() queries = handler.run_chp_queries() reasoner_std_final = handler.construct_trapi_response() # test output is TRAPI compliant validate_Message(reasoner_std_final['message']) KG = reasoner_std_final["message"]['knowledge_graph'] res = reasoner_std_final["message"]['results'] res_pretty = json.dumps(reasoner_std_final, indent=2) print(res_pretty)
def test_no_gene_drug_evidence_with_drug_wildcard(self): """ queries with no gene/drug evidence, but with drug wildcard """ # empty response reasoner_std = {"query_graph": {}} # empty query graph reasoner_std["query_graph"] = {"edges": {}, "nodes": {}} # add in gene node (to be filled by contribution analysis reasoner_std['query_graph']['nodes']['n0'] = {'category': BIOLINK_DRUG} #add in disease node disease = ('Breast_Cancer', 'MONDO:0007254') reasoner_std['query_graph']['nodes']['n1'] = { 'category': BIOLINK_DISEASE, 'id': '{}'.format(disease[1]) } # add target survival node phenotype = ('Survival_Time', 'EFO:0000714') reasoner_std['query_graph']['nodes']['n2'] = { 'category': BIOLINK_PHENOTYPIC_FEATURE, 'id': '{}'.format(phenotype[1]), } # link disease to target survival node reasoner_std['query_graph']['edges']['e0'] = { 'predicate': BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE, 'subject': 'n1', 'object': 'n2', 'properties': { 'qualifier': '>=', 'days': 1000 } } # link genes/drugs to disease reasoner_std['query_graph']['edges']['e1'] = { 'predicate': BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE, 'subject': 'n0', 'object': 'n1' } # test input is TRAPI compliant validate_Message( reasoner_std ) # doesn't return True/False for some reason... Will just present exception if not compliant handler = TrapiInterface(query=reasoner_std, max_results=2) queries = handler.build_chp_queries() queries = handler.run_chp_queries() reasoner_std_final = handler.construct_trapi_response() # test output is TRAPI compliant validate_Message(reasoner_std_final['message']) KG = reasoner_std_final["message"]['knowledge_graph'] res_pretty = json.dumps(reasoner_std_final, indent=2) print(res_pretty) # extract probability for _, edge in KG['edges'].items(): if edge['predicate'] == 'biolink:has_phenotype': p_survival = edge['attributes'][0]['value'] break print("probability of survival:", p_survival)
def test_normal_two_genes_and_drug(self): """ Normal request with two genes and a drug """ # empty response reasoner_std = {"query_graph": dict()} # empty query graph reasoner_std["query_graph"] = {"edges": dict(), "nodes": dict()} # add in evidence gene gene1 = ('RAF1', 'ENSEMBL:ENSG00000132155') reasoner_std['query_graph']['nodes']['n0'] = { 'category': BIOLINK_GENE, 'id': '{}'.format(gene1[1]) } gene2 = ('BRCA1', 'ENSEMBL:ENSG00000012048') reasoner_std['query_graph']['nodes']['n1'] = { 'category': 'biolink:Gene', 'id': '{}'.format(gene2[1]) } # add in evidence drug drug = ('CYCLOPHOSPHAMIDE', 'CHEMBL:CHEMBL88') reasoner_std['query_graph']['nodes']['n2'] = { 'category': BIOLINK_DRUG, 'id': '{}'.format(drug[1]) } # add in disease node disease = ('Breast_Cancer', 'MONDO:0007254') reasoner_std['query_graph']['nodes']['n3'] = { 'category': BIOLINK_DISEASE, 'id': '{}'.format(disease[1]) } # add target survival node phenotype = ('Survival_Time', 'EFO:0000714') reasoner_std['query_graph']['nodes']['n4'] = { 'category': BIOLINK_PHENOTYPIC_FEATURE, 'id': '{}'.format(phenotype[1]), } # link genes/drugs to disease reasoner_std['query_graph']['edges']['e0'] = { 'predicate': BIOLINK_GENE_TO_DISEASE_PREDICATE, 'subject': 'n0', 'object': 'n3' } reasoner_std['query_graph']['edges']['e1'] = { 'predicate': BIOLINK_GENE_TO_DISEASE_PREDICATE, 'subject': 'n1', 'object': 'n3' } reasoner_std['query_graph']['edges']['e2'] = { 'predicate': BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE, 'subject': 'n2', 'object': 'n3' } # link disease to target reasoner_std['query_graph']['edges']['e3'] = { 'predicate': BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE, 'subject': 'n3', 'object': 'n4', 'properties': { 'qualifier': '>=', 'days': 970 } } # test input is TRAPI compliant validate_Message( reasoner_std ) # doesn't return True/False for some reason... Will just present exception if not compliant handler = TrapiInterface(query=reasoner_std) queries = handler.build_chp_queries() queries = handler.run_chp_queries() reasoner_std_final = handler.construct_trapi_response() # test output is TRAPI compliant validate_Message(reasoner_std_final['message']) KG = reasoner_std_final['message']['knowledge_graph'] for edge_key in KG['edges'].keys(): edge = KG['edges'][edge_key] if edge['predicate'] == BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE: p_survival = edge['attributes'][0]['value'] print("probability of survival:", p_survival)