def test_curies(self):
     interface = TrapiInterface(
         bkb_handler=self.bkb_handler,
         dynamic_reasoner=self.dynamic_reasoner,
         joint_reasoner=self.joint_reasoner,
     )
     curies = interface.get_curies()
 def test_meta_knowledge_graph(self):
     interface = TrapiInterface(
         bkb_handler=self.bkb_handler,
         dynamic_reasoner=self.dynamic_reasoner,
         joint_reasoner=self.joint_reasoner,
     )
     meta_kg = interface.get_meta_knowledge_graph()
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
 def test_backwards_contribution_node_one_hop(self):
     with open(
             'query_samples/error_samples/test_backwards_contribution_node_one_hop.pk',
             'rb') as f_:
         query = pickle.load(f_)
     with self.assertRaises(MalformedSubjectObjectOnDrugGene) as context:
         interface = TrapiInterface(query=query)
Beispiel #6
0
 def test_illegal_disease_to_phenotype_one_hop(self):
     with open(
             'query_samples/error_samples/test_illegal_disease_to_phenotype_one_hop.pk',
             'rb') as f_:
         query = pickle.load(f_)
     with self.assertRaises(IncompatibleDrugGeneOneHopEdge) as context:
         interface = TrapiInterface(query=query)
Beispiel #7
0
 def test_more_than_one_phenotype(self):
     with open(
             'query_samples/error_samples/test_more_than_one_phenotype.pk',
             'rb') as f_:
         query = pickle.load(f_)
     with self.assertRaises(TooManyPhenotypeNodes) as context:
         interface = TrapiInterface(query=query)
Beispiel #8
0
    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)
Beispiel #9
0
 def get_trapi_interface(self, chp_config):
     return TrapiInterface(
         hosts_filename=chp_config.hosts_filename,
         num_processes_per_host=chp_config.num_processes_per_host,
         bkb_handler=chp_config.bkb_handler,
         joint_reasoner=chp_config.joint_reasoner,
         dynamic_reasoner=chp_config.dynamic_reasoner,
     )
Beispiel #10
0
 def test_illegal_gene_to_disease_default(self):
     with open(
             'query_samples/error_samples/test_illegal_gene_to_disease_default.pk',
             'rb') as f_:
         query = pickle.load(f_)
     with self.assertRaises(
             MalformedSubjectObjectOnGeneToDisease) as context:
         interface = TrapiInterface(query=query)
Beispiel #11
0
 def test_illegal_disease_to_phenotype_wildcard(self):
     with open(
             'query_samples/error_samples/test_illegal_disease_to_phenotype_wildcard.pk',
             'rb') as f_:
         query = pickle.load(f_)
     with self.assertRaises(
             MalformedSubjectObjectOnDiseaseToPhenotype) as context:
         interface = TrapiInterface(query=query)
Beispiel #12
0
 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()
Beispiel #13
0
 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()
Beispiel #14
0
    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)
Beispiel #15
0
 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()
Beispiel #16
0
    def test_no_target(self):
        """ Test with no target (should crash)
        """
        with self.assertRaises(SystemExit) as se:

            # empty response
            reasoner_std = {"query_graph": dict()}

            # empty query graph
            reasoner_std["query_graph"] = {"edges": dict(), "nodes": dict()}

            handler = TrapiInterface(query=reasoner_std)
            queries = handler.build_chp_queries()

        self.assertEqual(
            se.exception.code,
            'Survival Node not found. Node category must be \'biolink:PhenotypicFeature\' and id must be in: EFO:0000714'
        )
Beispiel #17
0
    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)
Beispiel #18
0
 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()
Beispiel #19
0
 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 get_trapi_interface(chp_config=None):
    if chp_config is None:
        chp_config = ChpApiConfig
    return TrapiInterface(
        hosts_filename=chp_config.hosts_filename,
        num_processes_per_host=chp_config.num_processes_per_host,
        bkb_handler=chp_config.bkb_handler,
        joint_reasoner=chp_config.joint_reasoner,
        dynamic_reasoner=chp_config.dynamic_reasoner,
    )
Beispiel #21
0
 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()
Beispiel #22
0
 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()
Beispiel #23
0
 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()
Beispiel #24
0
 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()
Beispiel #25
0
 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()
Beispiel #26
0
 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()
Beispiel #27
0
 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()
Beispiel #28
0
    def test_no_disease(self):
        """ Test with no disease
        """
        with self.assertRaises(SystemExit) as se:

            # empty response
            reasoner_std = {"query_graph": dict()}

            # empty query graph
            reasoner_std["query_graph"] = {"edges": dict(), "nodes": dict()}

            # add target survival node
            phenotype = ('Survival_Time', 'EFO:0000714')
            reasoner_std['query_graph']['nodes']['n2'] = {
                'category': BIOLINK_PHENOTYPIC_FEATURE,
                'id': '{}'.format(phenotype[1]),
            }
            handler = TrapiInterface(query=reasoner_std)
            queries = handler.build_chp_queries()

        self.assertEqual(
            se.exception.code,
            'Disease node not found. Node type must be \'biolink:Disease\' and curie must be in: MONDO:0007254'
        )
 def get_responses(self, queries=None, trapi_queries=None):
     # Initialize interface
     interface = TrapiInterface(
         bkb_handler=self.bkb_handler,
         dynamic_reasoner=self.dynamic_reasoner,
         joint_reasoner=self.joint_reasoner,
     )
     # Load queries
     if trapi_queries is None:
         trapi_queries = [
             Query.load(query["trapi_version"], None, query=query)
             for query in queries
         ]
     # Process trapi query
     interface.setup_trapi_queries(trapi_queries)
     # Build CHP queries
     interface.build_chp_queries()
     # Run CHP queries
     interface.run_chp_queries()
     # Get Responses
     responses = interface.construct_trapi_responses()
     return responses
Beispiel #30
0
 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()