Exemplo n.º 1
0
 def _answer_query_using_bte(self, input_qnode_key: str, output_qnode_key: str, qg: QueryGraph,
                             answer_kg: QGOrganizedKnowledgeGraph, valid_bte_inputs_dict: Dict[str, Set[str]],
                             log: ARAXResponse) -> Tuple[QGOrganizedKnowledgeGraph, Set[str]]:
     accepted_curies = set()
     qedge_key = next(qedge_key for qedge_key in qg.edges)
     qedge = qg.edges[qedge_key]
     input_qnode = qg.nodes[input_qnode_key]
     output_qnode = qg.nodes[output_qnode_key]
     # Send this single-edge query to BTE, input curie by input curie (adding findings to our answer KG as we go)
     for curie in input_qnode.id:
         # Consider all different combinations of qnode types (can be multiple if gene/protein)
         for input_qnode_category, output_qnode_category in itertools.product(input_qnode.category, output_qnode.category):
             if eu.get_curie_prefix(curie) in valid_bte_inputs_dict['curie_prefixes']:
                 accepted_curies.add(curie)
                 try:
                     loop = asyncio.new_event_loop()
                     seqd = SingleEdgeQueryDispatcher(input_cls=input_qnode_category,
                                                      output_cls=output_qnode_category,
                                                      pred=qedge.predicate,
                                                      input_id=eu.get_curie_prefix(curie),
                                                      values=eu.get_curie_local_id(curie),
                                                      loop=loop)
                     log.debug(f"Sending query to BTE: {curie}-{qedge.predicate if qedge.predicate else ''}->{output_qnode_category}")
                     seqd.query()
                     reasoner_std_response = seqd.to_reasoner_std()
                 except Exception:
                     trace_back = traceback.format_exc()
                     error_type, error, _ = sys.exc_info()
                     log.error(f"Encountered a problem while using BioThings Explorer. {trace_back}",
                               error_code=error_type.__name__)
                     return answer_kg, accepted_curies
                 else:
                     answer_kg = self._add_answers_to_kg(answer_kg, reasoner_std_response, input_qnode_key, output_qnode_key, qedge_key, log)
     return answer_kg, accepted_curies
Exemplo n.º 2
0
    def _answer_query_using_bte(self, input_qnode, output_qnode, qedge, answer_kg, valid_bte_inputs_dict):
        accepted_curies = set()
        # Send this single-edge query to BTE, once per input curie (adding findings to our answer KG as we go)
        for curie in input_qnode.curie:
            if eu.get_curie_prefix(curie) in valid_bte_inputs_dict['curie_prefixes']:
                accepted_curies.add(curie)
                try:
                    loop = asyncio.new_event_loop()
                    seqd = SingleEdgeQueryDispatcher(input_cls=input_qnode.type,
                                                     output_cls=output_qnode.type,
                                                     pred=qedge.type,
                                                     input_id=eu.get_curie_prefix(curie),
                                                     values=eu.get_curie_local_id(curie),
                                                     loop=loop)
                    self.response.debug(f"Sending query to BTE: {curie}-{qedge.type if qedge.type else ''}->{output_qnode.type}")
                    seqd.query()
                    reasoner_std_response = seqd.to_reasoner_std()
                except Exception:
                    trace_back = traceback.format_exc()
                    error_type, error, _ = sys.exc_info()
                    self.response.error(f"Encountered a problem while using BioThings Explorer. {trace_back}",
                                        error_code=error_type.__name__)
                    return answer_kg, accepted_curies
                else:
                    answer_kg = self._add_answers_to_kg(answer_kg, reasoner_std_response, input_qnode.id, output_qnode.id, qedge.id)

        return answer_kg, accepted_curies
 def setUpClass(cls):
     seqd = SingleEdgeQueryDispatcher(
         input_cls="ChemicalSubstance",
         output_cls="Protein",
         pred="",
         input_id="CHEMBL.COMPOUND",
         values="CHEMBL112",
     )
     seqd.query()
     cls.response = seqd.to_reasoner_std()
Exemplo n.º 4
0
from biothings_explorer.user_query_dispatcher import SingleEdgeQueryDispatcher

seqd = SingleEdgeQueryDispatcher(output_cls = "ChemicalSubstance", 
								input_cls = "Disease",
								pred = "physically_interacts_with",
								input_id = "NCBIGene",
								values = "1017")

query = seqd.query(verbose = True)

output = seqd.to_reasoner_std() # Still need to read documentation for this method
print()
print(output.keys())
# output: dict_keys(['query_graph', 'knowledge_graph', 'results'])
queryGraph = output["query_graph"]
knowledgeGraphNodes = output["knowledge_graph"]["nodes"][:5]
knowledgeGraphEdges = output["knowledge_graph"]["edges"][:5]
# output["results"][:5] 

print("\nQuery Graph:")
print(queryGraph)
print("\nKnowledge Graph Nodes:")
print(knowledgeGraphNodes)
print("\nKnowledge Graph Edges:")
print(knowledgeGraphEdges)