def create_message(self): model = stmts_clj_from_text('MAP2K1 binds MAPK1') entity = agent_clj_from_text('MAPK1-MAP2K1 complex') condition_entity = agent_clj_from_text('MAP2K1') entities = KQMLList([KQMLList([':description', entity])]) pattern = KQMLList() pattern.set('entities', entities) pattern.sets('type', 'no_change') value = KQMLList() value.sets('type', 'qualitative') value.sets('value', 'high') pattern.set('value', value) content = KQMLList('SATISFIES-PATTERN') content.set('pattern', pattern) content.set('model', model) conditions = KQMLList() condition = KQMLList() condition.sets('type', 'multiple') condition.set('value', '10.0') quantity = KQMLList() quantity.sets('type', 'total') entity = KQMLList() entity.set('description', condition_entity) quantity.set('entity', entity) condition.set('quantity', quantity) conditions.append(condition) content.set('conditions', conditions) msg = get_request(content) return (msg, content)
def send_display_figure(self, path): msg = KQMLPerformative('tell') content = KQMLList('display-image') content.set('type', 'simulation') content.sets('path', path) msg.set('content', content) self.send(msg)
def create_message_3(self): content = KQMLList('FIND-CELLULAR-LOCATION') genes = ekb_from_text('AKT1, MAPK1') content.sets('genes', str(genes)) msg = get_request(content) return msg, content
def create_message_failure_2(self): target = ekb_kstring_from_text('ABC') content = KQMLList('FIND-CAUSALITY-SOURCE') content.set('target', target) content.sets('type', 'phosphorylates') msg = get_request(content) return msg, content
def create_message(self): source = ekb_kstring_from_text('MAPK1') content = KQMLList('FIND-CAUSALITY-TARGET') content.set('source', source) content.sets('type', 'phosphorylation') msg = get_request(content) return msg, content
def create_message2(self): txt = 'ERK activates ELK1. DUSP inactivates ELK1. ' + \ 'Active ELK1 transcribes FOS.' model = stmts_kstring_from_text(txt) entity = ekb_kstring_from_text('FOS') entities = KQMLList([KQMLList([':description', entity])]) pattern = KQMLList() pattern.set('entities', entities) pattern.sets('type', 'always_value') value = KQMLList() value.sets('type', 'qualitative') value.sets('value', 'low') pattern.set('value', value) content = KQMLList('SATISFIES-PATTERN') content.set('pattern', pattern) content.set('model', model) condition_entity = ekb_kstring_from_text('DUSP') conditions = KQMLList() condition = KQMLList() condition.sets('type', 'multiple') condition.set('value', '100.0') quantity = KQMLList() quantity.sets('type', 'total') entity = KQMLList() entity.set('description', condition_entity) quantity.set('entity', entity) condition.set('quantity', quantity) conditions.append(condition) content.set('conditions', conditions) msg = get_request(content) return (msg, content)
def create_message_AKT1(self): content = KQMLList('FIND-GENE-SUMMARY') genes = ekb_from_text('AKT1') content.sets('gene', str(genes)) msg = get_request(content) return msg, content
def create_message(self): txt = ('MEK not bound to Selumetinib phosphorylates ERK. DUSP ' 'dephosphorylates ERK. Selumetinib binds MEK.') model = stmts_clj_from_text(txt) entity = agent_clj_from_text('ERK that is phosphorylated') entities = KQMLList([KQMLList([':description', entity])]) pattern = KQMLList() pattern.set('entities', entities) pattern.sets('type', 'no_change') value = KQMLList() value.sets('type', 'qualitative') value.sets('value', 'low') pattern.set('value', value) content = KQMLList('SATISFIES-PATTERN') content.set('pattern', pattern) content.set('model', model) condition_entity = agent_clj_from_text('Selumetinib') conditions = KQMLList() condition = KQMLList() condition.sets('type', 'multiple') condition.set('value', '100.0') quantity = KQMLList() quantity.sets('type', 'total') entity = KQMLList() entity.set('description', condition_entity) quantity.set('entity', entity) condition.set('quantity', quantity) conditions.append(condition) content.set('conditions', conditions) msg = get_request(content) return msg, content
def make_failure(self, reason=None, description=None): msg = KQMLList('FAILURE') if reason: msg.set('reason', reason) if description: msg.sets('description', description) return msg
def create_message_failure(self): content = KQMLList('CREATE-TUMOR-BOARD-REPORT') patient_id = '101' content.sets('patient-id', patient_id) msg = get_request(content) return msg, content
def respond_find_variants_for_genes(self, content): """Response content to find-variants-for-genes""" gene_arg = content.get('GENES') if not gene_arg: self.make_failure('MISSING_MECHANISM') gene_names = _get_kqml_names(gene_arg) if not gene_names: return self.make_failure('MISSING_MECHANISM') disease_arg = content.get('DISEASE') if not disease_arg: return self.make_failure('MISSING_MECHANISM') disease_names = _get_kqml_names(disease_arg) if not disease_names: return self.make_failure('INVALID_DISEASE') disease_name = _sanitize_disase_name(disease_names[0]) disease_abbr = self.BA.get_tcga_abbr(disease_name) if disease_abbr is None: return self.make_failure('INVALID_DISEASE') result = self.BA.find_variants_for_genes_cbio(gene_names, disease_abbr, "tcga") if not result: return self.make_failure('MISSING_MECHANISM') reply = KQMLList('SUCCESS') reply.sets('variants', str(result)) return reply
def create_message1(self): txt = 'ELK1 transcribes FOS.' model = stmts_clj_from_text(txt) entity = agent_clj_from_text('FOS') entities = KQMLList([KQMLList([':description', entity])]) pattern = KQMLList() pattern.set('entities', entities) pattern.sets('type', 'eventual_value') value = KQMLList() value.sets('type', 'qualitative') value.sets('value', 'high') pattern.set('value', value) content = KQMLList('SATISFIES-PATTERN') content.set('pattern', pattern) content.set('model', model) condition_entity = agent_clj_from_text('MAPK1') conditions = KQMLList() condition = KQMLList() condition.sets('type', 'multiple') condition.set('value', '100.0') quantity = KQMLList() quantity.sets('type', 'total') entity = KQMLList() entity.set('description', condition_entity) quantity.set('entity', entity) condition.set('quantity', quantity) conditions.append(condition) content.set('conditions', conditions) msg = get_request(content) return msg, content
def respond_find_mutation_significance(self, content): """Response content to find-mutation-significance request""" gene_arg = content.gets('GENE') if not gene_arg: self.make_failure('MISSING_MECHANISM') gene_names = _get_term_names(gene_arg) if not gene_names: return self.make_failure('MISSING_MECHANISM') gene_name = gene_names[0] disease_arg = content.gets('DISEASE') if not disease_arg: return self.make_failure('MISSING_MECHANISM') disease_names = _get_term_names(disease_arg) if not disease_names: return self.make_failure('INVALID_DISEASE') disease_name = disease_names[0].replace("-", " ").lower() disease_abbr = self.CA.get_tcga_abbr(disease_name) if disease_abbr is None: return self.make_failure('INVALID_DISEASE') result = self.CA.find_mutation_significance(gene_name, disease_abbr) if not result: return self.make_failure('MISSING_MECHANISM') reply = KQMLList('SUCCESS') reply.sets('mutsig', result) return reply
def respond_find_mutation_frequency(self, content): """Response content to find-mutation-frequency request""" gene_arg = content.gets('GENE') if not gene_arg: self.make_failure('MISSING_MECHANISM') gene_names = _get_term_names(gene_arg) if not gene_names: return self.make_failure('MISSING_MECHANISM') gene_name = gene_names[0] disease_arg = content.gets('DISEASE') if not disease_arg: return self.make_failure('MISSING_MECHANISM') disease_names = _get_term_names(disease_arg) if not disease_names: return self.make_failure('INVALID_DISEASE') disease_name = _sanitize_disase_name(disease_names[0]) disease_abbr = self.CA.get_tcga_abbr(disease_name) if disease_abbr is None: return self.make_failure('INVALID_DISEASE') result = self.CA.find_mutation_frequency(gene_name, disease_abbr) if not result: return self.make_failure('MISSING_MECHANISM') reply = KQMLList('SUCCESS') reply.sets('mutfreq', result) return reply
def create_message_failure(self): target = agent_clj_from_text('BRAF') content = KQMLList('FIND-CAUSALITY-SOURCE') content.set('target', target) content.sets('type', 'activates') msg = get_request(content) return msg, content
def create_message(self): target = agent_clj_from_text('BRAF') content = KQMLList('FIND-CAUSALITY-SOURCE') content.set('target', target) content.sets('type', 'phosphorylation') msg = get_request(content) return msg, content
def create_message_failure(self): source = agent_clj_from_text('MAPK1') content = KQMLList('FIND-CAUSALITY-TARGET') content.set('source', source) content.sets('type', 'activation') msg = get_request(content) return msg, content
def make_failure(reason=None, description=None): msg = KQMLList('FAILURE') if reason: msg.set('reason', reason) if description: msg.sets('description', description) return msg
def test_build_from_json(): mm = MRA_Module(testing=True) st = Phosphorylation(Agent('MEK'), Agent('ERK')) msg = KQMLList('BUILD-MODEL') msg.sets('description', json.dumps(stmts_to_json([st]))) msg.sets('format', 'indra_json') print(msg) reply = mm.respond_build_model(msg)
def test_choose_nonsense(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE') msg_content.sets('ekb-term', ekb_from_text('bagel')) res = bs.respond_choose_sense(msg_content) print(res) assert res.head() == 'SUCCESS' assert res.get('agents')[0].gets('ont-type') == None
def test_respond_choose_nonsense(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE') msg_content.sets('ekb-term', ekb_from_text('bagel')) res = bs.respond_choose_sense(msg_content) print(res) assert res.head() == 'SUCCESS' assert res.get('agents')[0].gets('ont-type') is None
def create_message_1(self): content = KQMLList('FIND-DRUGS-FOR-MUTATION-DATASET') genes = ekb_from_text('TP53') content.sets('genes', str(genes)) content.sets('dataset', "CTRP") msg = get_request(content) return msg, content
def _get_drug_kqml(drug_list): drugs = KQMLList() for dn, pci in drug_list: drug = KQMLList() drug.sets('name', dn.replace(' ', '-')) if pci: drug.sets('pubchem_id', pci) drugs.append(drug) return drugs
def create_message_failure(self): source = agent_clj_from_text('MAPK1') target = agent_clj_from_text('RAS') content = KQMLList('FIND-CAUSAL-PATH') content.set('source', source) content.set('target', target) content.sets('direction', 'both') msg = get_request(content) return msg, content
def _get_perf(text, msg_id): """Return a request message for a given text.""" msg = KQMLPerformative('REQUEST') msg.set('receiver', 'READER') content = KQMLList('run-text') content.sets('text', text) msg.set('content', content) msg.set('reply-with', msg_id) return msg
def send_null_provenance(self, stmt, for_what, reason=''): """Send out that no provenance could be found for a given Statement.""" content_fmt = ('<h4>No supporting evidence found for {statement} from ' '{cause}{reason}.</h4>') content = KQMLList('add-provenance') stmt_txt = EnglishAssembler([stmt]).make_model() content.sets('html', content_fmt.format(statement=stmt_txt, cause=for_what, reason=reason)) return self.tell(content)
def create_message_failure_3(self): source = ekb_kstring_from_text('RAS') target = ekb_kstring_from_text('MAPK1') content = KQMLList('FIND-CAUSAL-PATH') content.set('source', source) content.set('target', target) content.sets('direction', 'strict') msg = get_request(content) return msg, content
def _get_perf(text, msg_id): text = text.encode('utf-8') msg = KQMLPerformative('REQUEST') msg.set('receiver', 'DRUM') content = KQMLList('run-text') content.sets('text', text) msg.set('content', content) msg.set('reply-with', msg_id) return msg
def create_message_1(self): content = KQMLList('GET-VARIANT-INFO') gene = agent_clj_from_text('TP53') content.set('gene', gene) mutation = 'p.S241F' content.sets('mutation', mutation) msg = get_request(content) return msg, content
def test_choose_sense_what_member(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE-WHAT-MEMBER') msg_content.sets('collection', mek_ekb) print(msg_content) res = bs.respond_choose_sense_what_member(msg_content) print(res) print(res.head) assert (res.head() == 'SUCCESS') assert (len(res.get('members')) == 2)
def test_choose_sense_category(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE-CATEGORY') msg_content.sets('ekb-term', mek1_ekb) msg_content.sets('category', 'kinase activity') res = bs.respond_choose_sense_category(msg_content) print(res) print(res.head) assert (res.head() == 'SUCCESS') assert (res.get('in-category') == 'TRUE')
def test_respond_get_synonyms(): bs = BioSense_Module(testing=True) msg_content = KQMLList('GET-SYNONYMS') msg_content.sets('entity', mek1_ekb) res = bs.respond_get_synonyms(msg_content) assert res.head() == 'SUCCESS' syns = res.get('synonyms') syn_strs = [s.gets(':name') for s in syns] assert 'MAP2K1' in syn_strs assert 'MEK1' in syn_strs assert 'MKK1' in syn_strs
def test_respond_choose_sense_is_member(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE-IS-MEMBER') msg_content.sets('ekb-term', mek1_ekb) msg_content.sets('collection', mek_ekb) print(msg_content) res = bs.respond_choose_sense_is_member(msg_content) print(res) print(res.head()) assert(res.head() == 'SUCCESS') assert(res.get('is-member') == 'TRUE')
def test_choose_sense_is_member(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE-IS-MEMBER') msg_content.sets('ekb-term', mek1_ekb) msg_content.sets('collection', mek_ekb) print(msg_content) res = bs.respond_choose_sense_is_member(msg_content) print(res) print(res.head) assert (res.head() == 'SUCCESS') assert (res.get('is-member') == 'TRUE')
def report_paths_graph(self, paths_list): from indra.assemblers.graph import GraphAssembler from indra.util import flatten path_stmts = [stmts_from_json(l) for l in paths_list] all_stmts = flatten(path_stmts) ga = GraphAssembler(all_stmts) ga.make_model() resource = get_img_path('qca_paths.png') ga.save_pdf(resource) content = KQMLList('display-image') content.set('type', 'simulation') content.sets('path', resource) self.tell(content)
def send_display_model(self, diagrams): for diagram_type, resource in diagrams.items(): if not resource: continue if diagram_type == 'sbgn': content = KQMLList('display-sbgn') content.set('type', diagram_type) content.sets('graph', resource) else: content = KQMLList('display-image') content.set('type', diagram_type) content.sets('path', resource) self.tell(content)
def test_respond_choose_sense(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE') msg_content.sets('ekb-term', mek1_ekb) res = bs.respond_choose_sense(msg_content) print(res) agents = res.get('agents') assert agents and agents.data agent = agents[0] name = agent.gets('name') assert name == 'MAP2K1' ont_type = agent.get('ont-type') assert ont_type == 'ONT::GENE'
def get_ambiguities_msg(ambiguities): sa = [] for term_id, ambiguity in ambiguities.items(): msg = KQMLList(term_id) pr = ambiguity[0]['preferred'] pr_dbids = '|'.join([':'.join((k, v)) for k, v in pr['refs'].items()]) term = KQMLList('term') term.set('ont-type', pr['type']) term.sets('ids', pr_dbids) term.sets('name', pr['name']) msg.set('preferred', term) alt = ambiguity[0]['alternative'] alt_dbids = '|'.join([':'.join((k, v)) for k, v in alt['refs'].items()]) term = KQMLList('term') term.set('ont-type', alt['type']) term.sets('ids', alt_dbids) term.sets('name', alt['name']) msg.set('alternative', term) sa.append(msg) ambiguities_msg = KQMLList(sa) return ambiguities_msg
def respond_describe_model(self, content): """Convert the model to natural language.""" # Get the model. model_id = self._get_model_id(content) model = self.mra.get_model_by_id(model_id) # Turn the model into a text description. english_assembler = EnglishAssembler(model) desc = english_assembler.make_model() # Respond to the BA. resp = KQMLList('SUCCESS') resp.sets('description', desc) return resp
def respond_model_get_json(self, content): """Return response content to model-get-json request.""" try: model_id = self._get_model_id(content) except Exception: model_id = None model = self.mra.get_model_by_id(model_id) if model is not None: model_msg = encode_indra_stmts(model) reply = KQMLList('SUCCESS') reply.sets('model', model_msg) else: reply = self.make_failure('MISSING_MODEL') return reply
def test_respond_choose_sense_what_member(): bs = BioSense_Module(testing=True) msg_content = KQMLList('CHOOSE-SENSE-WHAT-MEMBER') msg_content.sets('collection', mek_ekb) print(msg_content) res = bs.respond_choose_sense_what_member(msg_content) print(res) print(res.head()) assert(res.head() == 'SUCCESS') assert(len(res.get('members')) == 2) m1 = res.get('members')[0] m2 = res.get('members')[1] assert m1.gets('name') == 'MAP2K1', m1.gets('name') assert m2.gets('name') == 'MAP2K2', m2.gets('name')
def get_kagent(agent_tuple, term_id=None): agent, ont_type, urls = agent_tuple db_refs = '|'.join('%s:%s' % (k, v) for k, v in agent.db_refs.items()) kagent = KQMLList(term_id) if term_id else KQMLList() kagent.sets('name', agent.name) kagent.sets('ids', db_refs) url_parts = [KQMLList([':name', KQMLString(k), ':dblink', KQMLString(v)]) for k, v in urls.items()] url_list = KQMLList() for url_part in url_parts: url_list.append(url_part) kagent.set('id-urls', url_list) kagent.set('ont-type', ont_type) return kagent
def respond_model_remove_mechanism(self, content): """Return response content to model-remove-mechanism request.""" ekb = content.gets('description') model_id = self._get_model_id(content) no_display = content.get('no-display') try: res = self.mra.remove_mechanism(ekb, model_id) except Exception as e: raise InvalidModelDescriptionError(e) model_id = res.get('model_id') if model_id is None: raise InvalidModelDescriptionError('Could not find model id.') # Start a SUCCESS message msg = KQMLPerformative('SUCCESS') # Add the model id msg.set('model-id', str(model_id)) # Add the INDRA model json model = res.get('model') model_msg = encode_indra_stmts(model) msg.sets('model', model_msg) # Handle empty model if not model: self.send_clean_model() # Get the action and add it to the message removed = res.get('removed') if not removed: msg = self.make_failure('REMOVE_FAILED') return msg else: actionl = KQMLList('remove_stmts') actionl.sets('statements', encode_indra_stmts(removed)) msg.set('action', actionl) # Add the diagram diagrams = res.get('diagrams') logger.info(diagrams) if not no_display: if diagrams: rxn_diagram = diagrams.get('reactionnetwork') if rxn_diagram: msg.sets('diagram', rxn_diagram) self.send_display_model(diagrams) return msg
def respond_get_synonyms(self, content): """Respond to a query looking for synonyms of a protein.""" ekb = content.gets('entity') try: synonyms = self.bs.get_synonyms(ekb) except InvalidAgentError: msg = self.make_failure('INVALID_AGENT') except SynonymsUnknownError: msg = self.make_failure('SYNONYMS_UNKNOWN') else: syns_kqml = KQMLList() for s in synonyms: entry = KQMLList() entry.sets(':name', s) syns_kqml.append(entry) msg = KQMLList('SUCCESS') msg.set('synonyms', syns_kqml) return msg
def send_provenance_for_stmts(self, stmt_list, for_what, limit=50, ev_counts=None): """Send out a provenance tell for a list of INDRA Statements. The message is used to provide evidence supporting a conclusion. """ logger.info("Sending provenance for %d statements for \"%s\"." % (len(stmt_list), for_what)) title = "Supporting evidence from the %s for %s" \ % (self.name, for_what) content_fmt = '<h4>%s (max %s):</h4>\n%s<hr>' evidence_html = self._make_report_cols_html(stmt_list, limit=limit, ev_counts=ev_counts, title=title) content = KQMLList('add-provenance') content.sets('html', content_fmt % (title, limit, evidence_html)) return self.tell(content)
def read_pmc(self, pmcid): """Read a given PMC article. Parameters ---------- pmcid : str The PMC ID of the article to read. Note that only articles in the open-access subset of PMC will work. """ msg = KQMLPerformative('REQUEST') msg.set('receiver', 'READER') content = KQMLList('run-pmcid') content.sets('pmcid', pmcid) content.set('reply-when-done', 'true') msg.set('content', content) msg.set('reply-with', 'P-%s' % pmcid) self.reply_counter += 1 self.send(msg)
def respond_find_treatment(self, content): """Response content to find-treatment request.""" try: disease_arg = content.gets('disease') disease = get_disease(ET.fromstring(disease_arg)) except Exception as e: logger.error(e) reply = self.make_failure('INVALID_DISEASE') return reply logger.info('Disease type: %s' % disease.disease_type) if not trips_isa(disease.disease_type, 'ont::cancer'): logger.info('Disease is not a type of cancer.') reply = self.make_failure('DISEASE_NOT_FOUND') return reply logger.debug('Disease: %s' % disease.name) try: mut_protein, mut_percent, agents = \ self.dtda.get_top_mutation(disease.name) except DiseaseNotFoundException: reply = self.make_failure('DISEASE_NOT_FOUND') return reply # TODO: get functional effect from actual mutations # TODO: add list of actual mutations to response # TODO: get fraction not percentage from DTDA reply = KQMLList('SUCCESS') protein = KQMLList() protein.set('name', mut_protein) protein.set('hgnc', mut_protein) reply.set('protein', protein) reply.sets('disease', disease_arg) reply.set('prevalence', '%.2f' % (mut_percent/100.0)) reply.set('functional-effect', 'ACTIVE') # These differ only in mutation, which isn't relevant. an_agent = agents[0] drug_results = self.dtda.find_target_drugs(an_agent) drugs = self._get_drug_kqml(drug_results) reply.set('drugs', drugs) return reply
def respond_find_drug_targets(self, content): """Response content to find-drug-target request.""" try: drug_arg = content.gets('drug') drug = self._get_agent(drug_arg) except Exception as e: return self.make_failure('INVALID_DRUG') logger.info('DTDA looking for targets of %s' % drug.name) drug_targets = self.dtda.find_drug_targets(drug) all_targets = sorted(list(set(drug_targets))) reply = KQMLList('SUCCESS') targets = KQMLList() for target_name in all_targets: target = KQMLList() target.sets('name', target_name) targets.append(target) reply.set('targets', targets) return reply
def test_respond_choose_sense_category(): bs = BioSense_Module(testing=True) cases = [(mek1_ekb, [('kinase activity', 'TRUE'), ('enzyme', 'TRUE'), ('kinase', 'TRUE'), ('transcription-factor', 'FALSE'), ('W::KINASE', 'TRUE'), ('phosphatase', 'FALSE')]), (dusp_ekb, [('phosphatase', 'TRUE'), ('enzyme', 'TRUE')]), (ekb_from_text('BRAF'), [('kinase', 'TRUE')])] for ekb, result_tuples in cases: msg_content = KQMLList('CHOOSE-SENSE-CATEGORY') msg_content.sets('ekb-term', ekb) for cat, result in result_tuples: print('Testing: %s. Excpet result %s.' % (cat, result)) msg_content.sets('category', cat) res = bs.respond_choose_sense_category(msg_content) print(res) print(res.head()) assert(res.head() == 'SUCCESS') assert(res.get('in-category') == result)
def respond_model_undo(self, content): """Return response content to model-undo request.""" res = self.mra.model_undo() no_display = content.get('no-display') model_id = res.get('model_id') # Start a SUCCESS message msg = KQMLPerformative('SUCCESS') # Add the model id msg.set('model-id', 'NIL' if model_id is None else str(model_id)) # Add the INDRA model json model = res.get('model') # Handle empty model if not model: self.send_clean_model() model_msg = encode_indra_stmts(model) msg.sets('model', model_msg) # Get the action and add it to the message action = res.get('action') actionl = KQMLList() # Here we handle no action as effectively an empty remove action if action['action'] in ('no_op', 'remove_stmts'): actionl.append('remove_stmts') actionl.sets( 'statements', encode_indra_stmts(action['statements']) ) msg.set('action', actionl) # Add the diagram diagrams = res.get('diagrams') if not no_display: if diagrams: rxn_diagram = diagrams.get('reactionnetwork') if rxn_diagram: msg.sets('diagram', rxn_diagram) self.send_display_model(diagrams) return msg
def send_model_diagnoses(self, res): # SUGGESTIONS # If there is an explanation, english assemble it expl_path = res.get('explanation_path') if expl_path: # Only send this if we haven't already sent an explanation if not self.have_explanation: ea_path = EnglishAssembler(expl_path) path_str = ea_path.make_model() ea_goal = EnglishAssembler([self.mra.explain]) goal_str = ea_goal.make_model() if path_str and goal_str: explanation_str = ( 'Our model can now explain how %s: <i>%s</i>' % (goal_str[:-1], path_str)) content = KQMLList('SPOKEN') content.sets('WHAT', explanation_str) self.tell(content) # If there is a suggestion, say it suggs = res.get('stmt_suggestions') if suggs: say = 'I have some suggestions on how to complete our model.' say += ' We could try modeling one of:<br>' stmt_str = '<ul>%s</ul>' % \ ''.join([('<li>%s</li>' % EnglishAssembler([stmt]).make_model()) for stmt in suggs]) say += stmt_str content = KQMLList('SPOKEN') content.sets('WHAT', say) self.tell(content) # If there are corrections corrs = res.get('stmt_corrections') if corrs: stmt = corrs[0] say = 'It looks like a required activity is missing,' say += ' consider revising to <i>%s</i>' % \ (EnglishAssembler([stmt]).make_model()) content = KQMLList('SPOKEN') content.sets('WHAT', say) self.tell(content)
def create_statements(self): content = KQMLList('INDRA-TO-NL') content.sets('statements', json.dumps(stmts_to_json(self.statements))) return get_request(content), content
def create_message(self): content = KQMLList('TEST') content.sets('description', '') msg = KQMLPerformative('REQUEST') msg.set('content', content) return msg, content