def _extract_chp_query(self, query, query_type=None): evidence = {} dynamic_targets = {} # check edge for source and target edge_key = list(query["query_graph"]["edges"].keys())[0] edge = query["query_graph"]['edges'][edge_key] subject = edge['subject'] obj = edge['object'] # Get non-wildcard node if query_type == 'gene': drug_curie = query["query_graph"]['nodes'][obj]['id'] evidence['_{}'.format(drug_curie)] = 'True' elif query_type == 'drug': gene_curie = query["query_graph"]['nodes'][obj]['id'] evidence['_{}'.format(gene_curie)] = 'True' # default survival time dynamic_targets.update(self.default_survival_target) truth_target = ('EFO:0000714', '{} {}'.format(self.default_survival_target["EFO:0000714"]["op"], self.default_survival_target["EFO:0000714"]["value"])) chp_query = Query(evidence=evidence, targets=None, dynamic_evidence=None, dynamic_targets=dynamic_targets, type='updating') # Set some other helpful attributes chp_query.truth_target = truth_target chp_query.query_id = query["query_id"] if 'query_id' in query else None return chp_query
def _extract_chp_query(self, message, message_type): evidence = {} dynamic_targets = {} dynamic_evidence = {} if message_type == 'standard': # Setup gene and drug evidence for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[ 0] == BIOLINK_GENE_ENTITY or qnode.categories[ 0] == BIOLINK_DRUG_ENTITY: evidence['_{}'.format(qnode.ids[0])] = 'True' elif message_type == 'gene': for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[0] == BIOLINK_DRUG_ENTITY: #dynamic_evidence[qnode.ids[0]] = { # "op": '==', # "value": 'True', # } evidence['_{}'.format(qnode.ids[0])] = 'True' elif message_type == 'drug': for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[0] == BIOLINK_GENE_ENTITY: #dynamic_evidence[qnode.ids[0]] = { # "op": '==', # "value": 'True', # } evidence['_{}'.format(qnode.ids[0])] = 'True' # Grab edge for qedge_id, qedge in message.query_graph.edges.items(): break # Process predicate proxy dynamic_targets = self._process_predicate_proxy(qedge) # Process predicate context _evidence, _dynamic_evidence = self._process_predicate_context( qedge, message_type) evidence.update(_evidence) dynamic_evidence.update(_dynamic_evidence) #TODO: Probably need a more robust solution for when no context is provided in wildcard queries and you need it. #if len(evidence) == 0: # raise ValueError('Did not supply context with a query that required context.') target = list(dynamic_targets.keys())[0] truth_target = (target, '{} {}'.format(dynamic_targets[target]["op"], dynamic_targets[target]["value"])) chp_query = Query(evidence=evidence, targets=None, dynamic_evidence=dynamic_evidence, dynamic_targets=dynamic_targets, type='updating') # Set some other helpful attributes chp_query.truth_target = truth_target return chp_query
def _extract_chp_query(self, query, query_type=None): evidence = {} dynamic_targets = {} if len(query["query_graph"]['nodes']) > 2 or len( query["query_graph"]['edges']) > 1: sys.exit('1 hop quries can only have 2 nodes and 1 edge') # check edge for source and target edge_key = list(query["query_graph"]["edges"].keys())[0] edge = query["query_graph"]['edges'][edge_key] if 'subject' not in edge.keys() or 'object' not in edge.keys(): sys.exit( 'Edge must have both a \'subject\' and and \'object\' key') subject = edge['subject'] obj = edge['object'] # Get non-wildcard node if query_type == 'gene': if query["query_graph"]['nodes'][subject][ 'category'] != BIOLINK_GENE: sys.exit('Subject node must be \'category\' {}'.format( BIOLINK_GENE)) drug_curie = query["query_graph"]['nodes'][obj]['id'] if drug_curie not in self.curies[BIOLINK_DRUG]: sys.exit('Invalid CHEMBL Identifier. Must be CHEMBL:<ID>') evidence['_{}'.format(drug_curie)] = 'True' elif query_type == 'drug': if query["query_graph"]['nodes'][subject][ 'category'] != BIOLINK_DRUG: sys.exit('Subject node must be \'category\' {}'.format( BIOLINK_DRUG)) gene_curie = query["query_graph"]['nodes'][obj]['id'] if gene_curie not in self.curies[BIOLINK_GENE]: sys.exit('Invalid ENSEMBL Identifier. Must be ENSEMBL:<ID>') evidence['_{}'.format(gene_curie)] = 'True' # default survival time dynamic_targets.update(self.default_survival_target) truth_target = ('EFO:0000714', '{} {}'.format( self.default_survival_target["EFO:0000714"]["op"], self.default_survival_target["EFO:0000714"]["value"])) chp_query = Query(evidence=evidence, targets=None, dynamic_evidence=None, dynamic_targets=dynamic_targets, type='updating') # Set some other helpful attributes chp_query.truth_target = truth_target chp_query.query_id = query["query_id"] if 'query_id' in query else None return chp_query
def _extract_chp_query(self, query, message_type): # Extract Message message = query.message # Initialize CHP BKB Query chp_query = ChpQuery(reasoning_type='updating') # Grab edge for qedge_id, qedge in message.query_graph.edges.items(): break # Process predicate proxy chp_query = self._process_predicate_proxy(qedge, chp_query) # Process predicate context chp_query = self._process_predicate_context(qedge, message_type, chp_query) #TODO: Probably need a more robust solution for when no context is provided in wildcard queries and you need it. #if len(evidence) == 0: # raise ValueError('Did not supply context with a query that required context.') if message_type == 'standard': # Setup gene and drug evidence for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[ 0] == BIOLINK_GENE_ENTITY or qnode.categories[ 0] == BIOLINK_DRUG_ENTITY: chp_query.add_meta_evidence(qnode.ids[0], 'True') elif message_type == 'gene' or message_type == 'drug_two_hop': for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[0] == BIOLINK_DRUG_ENTITY: if qnode.ids is not None: chp_query.add_meta_evidence(qnode.ids[0], 'True') elif message_type == 'drug' or message_type == 'gene_two_hop': for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[0] == BIOLINK_GENE_ENTITY: if qnode.ids is not None: chp_query.add_meta_evidence(qnode.ids[0], 'True') target = list(chp_query.dynamic_targets.keys())[0] truth_target = (target, '{} {}'.format( chp_query.dynamic_targets[target]["op"], chp_query.dynamic_targets[target]["value"])) # Set some other helpful attributes chp_query.truth_target = truth_target return chp_query
def _extract_chp_query(self, query, query_type): evidence = {} targets = [] dynamic_evidence = {} dynamic_targets = {} # ensure we are using all nodes/edges total_nodes = 0 total_edges = 0 # get phenotype node targets = list() acceptable_target_curies = ['EFO:0000714'] self.implicit_survival_node = False for node_key in query["query_graph"]['nodes'].keys(): node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_PHENOTYPIC_FEATURE and node['id'] in acceptable_target_curies: target_id = node_key total_nodes += 1 if total_nodes == 0: # Use Default Survival self.implicit_survival_node = True total_nodes += 1 #acceptable_target_curies_print = ','.join(acceptable_target_curies) #sys.exit("Survival Node not found. Node category must be '{}' and id must be in: {}".format(BIOLINK_PHENOTYPIC_FEATURE, # acceptable_target_curies_print)) elif total_nodes > 1: sys.exit('Too many target nodes') # get disease node info and ensure only 1 disease: acceptable_disease_curies = ['MONDO:0007254'] for node_key in query["query_graph"]['nodes'].keys(): node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_DISEASE and node['id'] in acceptable_disease_curies: disease_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE and edge['subject'] == disease_id and edge['object'] == target_id: if 'properties' in edge.keys(): days = edge['properties']['days'] qualifier = edge['properties']['qualifier'] else: days = 970 qualifier = '>=' total_edges += 1 if total_edges > 1: sys.exit('Disease has too many outgoing edges') total_nodes += 1 if self.implicit_survival_node: days=970 qualifier = '>=' total_edges += 1 if total_nodes == 1: acceptable_disease_curies_print = ','.join(acceptable_disease_curies) sys.exit("Disease node not found. Node type must be '{}' and curie must be in: {}".format(BIOLINK_DISEASE, acceptable_disease_curies_print)) elif total_nodes > 2: sys.exit('Too many disease nodes') # set BKB target dynamic_targets['EFO:0000714'] = { "op": qualifier, "value": days, } truth_target = ('EFO:0000714', '{} {}'.format(qualifier, days)) # get evidence for node_key in query["query_graph"]['nodes'].keys(): # genes node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_GENE: # check for appropriate gene node structure gene_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_GENE_TO_DISEASE_PREDICATE and edge['subject'] == gene_id and edge['object'] == disease_id: total_edges += 1 if total_edges == total_nodes - 1: sys.exit("Gene and disease edge not found. Edge type must be '{}'".format(BIOLINK_GENE_TO_DISEASE_PREDICATE)) elif total_edges > total_nodes: sys.exit('Gene has too many outgoing edges') # check for appropriate gene node curie if query_type != 'gene': gene_curie = node['id'] if gene_curie in self.curies[BIOLINK_GENE]: gene = gene_curie else: sys.exit('Invalid ENSEMBL Identifier. Must be in form ENSEMBL:<ID>.') evidence["_" + gene] = 'True' total_nodes += 1 # drugs if node['category'] == BIOLINK_DRUG: # check for appropriate drug node structure drug_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE and edge['subject'] == drug_id and edge['object'] == disease_id: total_edges += 1 if total_edges == total_nodes - 1: sys.exit("Drug and disease edge not found. Edge type must be '{}'".format(BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE)) elif total_edges > total_nodes: sys.exit('Drug has too many outgoing edges') # check for appropriate drug node curie if query_type != 'drug': drug_curie = node['id'] if drug_curie in self.curies[BIOLINK_DRUG]: drug = drug_curie else: sys.exit('Invalid CHEMBL Identifier: {}. Must be in form CHEMBL:<ID>'.format(drug_curie)) evidence['_' + drug] = 'True' total_nodes += 1 # Temporary solution to no evidence linking if len(evidence.keys()) == 0 and len(dynamic_evidence.keys()) == 0: self.no_evidence_probability_check = True else: self.no_evidence_probability_check = False # produce BKB query chp_query = Query( evidence=evidence, targets=targets, dynamic_evidence=dynamic_evidence, dynamic_targets=dynamic_targets, type='updating') # Set some other helpful attributes chp_query.truth_target = truth_target chp_query.query_id = query["query_id"] if 'query_id' in query else None return chp_query
def _extract_chp_query(self, message, message_type=None): # Initialize Chp Query chp_query = ChpQuery(reasoning_type='updating') # Ensure we are using all nodes/edges total_nodes = 0 total_edges = 0 query_graph = message.query_graph # get phenotype node targets = list() for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_PHENOTYPIC_FEATURE_ENTITY: target_id = node_key total_nodes += 1 survival_value = 970 survival_operator = '>=' # get disease node info and ensure only 1 disease: for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_DISEASE_ENTITY: disease_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support( edge.predicates[0], BIOLINK_HAS_PHENOTYPE_ENTITY ) and edge.subject == disease_id and edge.object == target_id: survival_time_constraint = edge.find_constraint( name='survival_time') if survival_time_constraint is not None: survival_value = survival_time_constraint.value survival_operator = survival_time_constraint.operator if survival_operator == 'matches': survival_operator = '==' total_edges += 1 total_nodes += 1 # set BKB target chp_query.add_dynamic_target(node.ids[0], survival_operator, survival_value) truth_target = (node.ids[0], '{} {}'.format(survival_operator, survival_value)) # get evidence for node_key in query_graph.nodes.keys(): # genes node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_GENE_ENTITY: # check for appropriate gene node structure gene_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support( edge.predicates[0], BIOLINK_GENE_ASSOCIATED_WITH_CONDITION_ENTITY ) and edge.subject == gene_id and edge.object == disease_id: total_edges += 1 # check for appropriate gene node curie gene_curie = node.ids[0] gene = gene_curie chp_query.add_meta_evidence(gene, 'True') total_nodes += 1 # drugs if node.categories[0] == BIOLINK_DRUG_ENTITY: # check for appropriate drug node structure drug_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support( edge.predicates[0], BIOLINK_TREATS_ENTITY ) and edge.subject == drug_id and edge.object == disease_id: total_edges += 1 # check for appropriate drug node curie drug_curie = node.ids[0] drug = drug_curie chp_query.add_dynamic_evidence(node.ids[0], '==', 'True') total_nodes += 1 # Set some other helpful attributes chp_query.truth_target = truth_target return chp_query
def _extract_chp_query(self, query, query_type=None): evidence = {} targets = [] dynamic_evidence = {} dynamic_targets = {} # ensure we are using all nodes/edges total_nodes = 0 total_edges = 0 # get phenotype node targets = list() for node_key in query["query_graph"]['nodes'].keys(): node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_PHENOTYPIC_FEATURE: target_id = node_key total_nodes += 1 # get disease node info and ensure only 1 disease: for node_key in query["query_graph"]['nodes'].keys(): node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_DISEASE: disease_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE and edge[ 'subject'] == disease_id and edge[ 'object'] == target_id: if 'properties' in edge.keys(): days = edge['properties']['days'] qualifier = edge['properties']['qualifier'] else: days = 970 qualifier = '>=' total_edges += 1 total_nodes += 1 # set BKB target dynamic_targets[node["id"]] = { "op": qualifier, "value": days, } truth_target = (node["id"], '{} {}'.format(qualifier, days)) # get evidence for node_key in query["query_graph"]['nodes'].keys(): # genes node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_GENE: # check for appropriate gene node structure gene_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_GENE_TO_DISEASE_PREDICATE and edge[ 'subject'] == gene_id and edge[ 'object'] == disease_id: total_edges += 1 # check for appropriate gene node curie gene_curie = node['id'] gene = gene_curie evidence["_" + gene] = 'True' total_nodes += 1 # drugs if node['category'] == BIOLINK_DRUG: # check for appropriate drug node structure drug_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE and edge[ 'subject'] == drug_id and edge[ 'object'] == disease_id: total_edges += 1 # check for appropriate drug node curie drug_curie = node['id'] drug = drug_curie evidence[node["id"]] = 'True' total_nodes += 1 # produce BKB query chp_query = Query(evidence=evidence, targets=targets, dynamic_evidence=dynamic_evidence, dynamic_targets=dynamic_targets, type='updating') # Set some other helpful attributes chp_query.truth_target = truth_target chp_query.query_id = query["query_id"] if 'query_id' in query else None return chp_query
def _extract_chp_query(self, query, query_type=None): evidence = {} targets = [] dynamic_evidence = {} dynamic_targets = {} # ensure we are using all nodes/edges total_nodes = 0 total_edges = 0 # get phenotype node targets = list() acceptable_target_curies = ['EFO:0000714'] for node_key in query["query_graph"]['nodes'].keys(): node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_PHENOTYPIC_FEATURE and node[ 'id'] in acceptable_target_curies: target_id = node_key total_nodes += 1 if total_nodes == 0: acceptable_target_curies_print = ','.join(acceptable_target_curies) sys.exit( 'Survival Node not found. Node category must be \'biolink:PhenotypicFeature\' and id must be in: ' + acceptable_target_curies_print) elif total_nodes > 1: sys.exit('Too many target nodes') # get disease node info and ensure only 1 disease: acceptable_disease_curies = ['MONDO:0007254'] for node_key in query["query_graph"]['nodes'].keys(): node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_DISEASE and node[ 'id'] in acceptable_disease_curies: disease_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_DISEASE_TO_PHENOTYPIC_FEATURE_PREDICATE and edge[ 'subject'] == disease_id and edge[ 'object'] == target_id: if 'properties' in edge.keys(): days = edge['properties']['days'] qualifier = edge['properties']['qualifier'] else: days = 970 qualifier = '>=' total_edges += 1 if total_edges == 0: sys.exit( 'Disease and target edge not found. Edge type must be \'biolink:DiseaseToPhenotypicFeatureAssociation\'' ) elif total_edges > 1: sys.exit('Disease has too many outgoing edges') total_nodes += 1 if total_nodes == 1: acceptable_disease_curies_print = ','.join( acceptable_disease_curies) sys.exit( 'Disease node not found. Node type must be \'biolink:Disease\' and curie must be in: ' + acceptable_disease_curies_print) elif total_nodes > 2: sys.exit('Too many disease nodes') # set BKB target dynamic_targets[node["id"]] = { "op": qualifier, "value": days, } truth_target = (node["id"], '{} {}'.format(qualifier, days)) # get evidence for node_key in query["query_graph"]['nodes'].keys(): # genes node = query["query_graph"]['nodes'][node_key] if node['category'] == BIOLINK_GENE: # check for appropriate gene node structure gene_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_GENE_TO_DISEASE_PREDICATE and edge[ 'subject'] == gene_id and edge[ 'object'] == disease_id: total_edges += 1 if total_edges == total_nodes - 1: sys.exit( "Gene and disease edge not found. Edge type must be '{}'" .format(BIOLINK_GENE_TO_DISEASE_PREDICATE)) elif total_edges > total_nodes: sys.exit('Gene has too many outgoing edges') # check for appropriate gene node curie gene_curie = node['id'] if gene_curie in self.curies[BIOLINK_GENE]: gene = gene_curie else: sys.exit( 'Invalid ENSEMBL Identifier. Must be in form ENSEMBL:<ID>.' ) evidence["_" + gene] = 'True' total_nodes += 1 # drugs if node['category'] == BIOLINK_DRUG: # check for appropriate drug node structure drug_id = node_key for edge_key in query["query_graph"]['edges'].keys(): edge = query["query_graph"]['edges'][edge_key] if edge['predicate'] == BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE and edge[ 'subject'] == drug_id and edge[ 'object'] == disease_id: total_edges += 1 if total_edges == total_nodes - 1: sys.exit( "Drug and disease edge not found. Edge type must be '{}'" .format( BIOLINK_CHEMICAL_TO_DISEASE_OR_PHENOTYPIC_FEATURE_PREDICATE )) elif total_edges > total_nodes: sys.exit('Drug has too many outgoing edges') # check for appropriate drug node curie drug_curie = node['id'] if drug_curie in self.curies[BIOLINK_DRUG]: drug = drug_curie else: sys.exit( 'Invalid CHEMBL Identifier: {}. Must be in form CHEMBL:<ID>' .format(drug_curie)) evidence[node["id"]] = 'True' total_nodes += 1 if total_nodes != len( query["query_graph"]['nodes']) or total_edges != len( query["query_graph"]['edges']): sys.exit('There are extra components in the provided QG structure') # produce BKB query chp_query = Query(evidence=evidence, targets=targets, dynamic_evidence=dynamic_evidence, dynamic_targets=dynamic_targets, type='updating') # Set some other helpful attributes chp_query.truth_target = truth_target chp_query.query_id = query["query_id"] if 'query_id' in query else None return chp_query
def _extract_chp_query(self, message, message_type): # Initialize CHP BKB Query chp_query = ChpQuery(reasoning_type='updating') # ensure we are using all nodes/edges total_nodes = 0 total_edges = 0 query_graph = message.query_graph # get phenotype node targets = list() acceptable_target_curies = ['EFO:0000714'] self.implicit_survival_node = False for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_PHENOTYPIC_FEATURE_ENTITY and node.ids[0] in acceptable_target_curies: target_id = node_key total_nodes += 1 if total_nodes == 0: # Use Default Survival self.implicit_survival_node = True total_nodes += 1 #acceptable_target_curies_print = ','.join(acceptable_target_curies) #sys.exit("Survival Node not found. Node category must be '{}' and id must be in: {}".format(Biolink(BIOLINK_PHENOTYPIC_FEATURE), # acceptable_target_curies_print)) survival_value = 970 survival_operator = '>=' # get disease node info and ensure only 1 disease: acceptable_disease_curies = ['MONDO:0007254'] for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_DISEASE_ENTITY and node.ids[0] in acceptable_disease_curies: disease_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support(edge.predicates[0], BIOLINK_HAS_PHENOTYPE_ENTITY) and edge.subject == disease_id and edge.object == target_id: survival_time_constraint = edge.find_constraint(name='survival_time') if survival_time_constraint is not None: survival_value = survival_time_constraint.value survival_operator = survival_time_constraint.operator if survival_operator == 'matches': survival_operator = '==' total_edges += 1 total_nodes += 1 if self.implicit_survival_node: days=970 qualifier = '>=' total_edges += 1 # set BKB target chp_query.add_dynamic_target('EFO:0000714', survival_operator, survival_value) truth_target = ('EFO:0000714', '{} {}'.format(survival_operator, survival_value)) # get evidence for node_key in query_graph.nodes.keys(): # genes node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_GENE_ENTITY: # check for appropriate gene node structure gene_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support(edge.predicates[0], BIOLINK_GENE_ASSOCIATED_WITH_CONDITION_ENTITY) and edge.subject == gene_id and edge.object == disease_id: total_edges += 1 # check for appropriate gene node curie if message_type != 'gene': gene_curie = node.ids[0] if gene_curie in self.curies[BIOLINK_GENE_ENTITY.get_curie()]: gene = gene_curie chp_query.add_meta_evidence(gene, 'True') total_nodes += 1 # drugs if node.categories[0] == BIOLINK_DRUG_ENTITY: # check for appropriate drug node structure drug_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support(edge.predicates[0], BIOLINK_TREATS_ENTITY) and edge.subject == drug_id and edge.object == disease_id: total_edges += 1 # check for appropriate drug node curie if message_type != 'drug': drug_curie = node.ids[0] if drug_curie in self.curies[BIOLINK_DRUG_ENTITY.get_curie()]: drug = drug_curie chp_query.add_meta_evidence(drug, 'True') total_nodes += 1 # Temporary solution to no evidence linking if len(chp_query.evidence.keys()) == 0 and len(chp_query.dynamic_evidence.keys()) == 0: self.no_evidence_probability_check = True else: self.no_evidence_probability_check = False # Set some other helpful attributes chp_query.truth_target = truth_target return chp_query