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
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()
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)