Пример #1
0
 def reply(self, ):
     reply_msg = KQMLPerformative('reply')
     reply_content = KQMLList()
     for t in self.tests:
         print 'reply {0}'.format(t)
         t_content = t.get_content()
         if t_content:
             reply_content.add(t_content.to_string())
     reply_msg.setParameter(':content', reply_content)
     return reply_msg
Пример #2
0
def test_get_time_interval_lb():
    ts = '(:lower-bound 4 :unit "hour")'
    lst = KQMLList.from_string(ts)
    ti = tra_module.get_time_interval(lst)
    assert ti.lb == 4 * units.hours
    assert ti.ub is None
    assert ti.get_lb_seconds() == 14400
Пример #3
0
def test_get_molecular_condition_dec():
    lst = KQMLList.from_string('(:type "decrease" :quantity (:type "total" ' +\
                               ':entity (:description "%s")))' % ekb_braf)
    mc = tra_module.get_molecular_condition(lst)
    assert mc.condition_type == 'decrease'
    assert mc.quantity.quant_type == 'total'
    assert mc.quantity.entity.name == 'BRAF'
Пример #4
0
 def respond_dont_know(self, msg, content_string):
     resp = '(ONT::TELL :content (ONT::DONT-KNOW :content %s))' %\
         content_string
     resp_list = KQMLList.from_string(resp)
     reply_msg = KQMLPerformative('reply')
     reply_msg.set_parameter(':content', resp_list)
     self.reply(msg, reply_msg)
Пример #5
0
def test_get_disease():
    disease_str = '(CANCER :DBNAME "pancreatic carcinoma" :DBID "EFO:0002618")'
    kl = KQMLList.from_string(disease_str)
    disease = DTDA_Module.get_disease(kl)
    assert (disease.disease_type == 'cancer')
    assert (disease.name == 'pancreatic carcinoma')
    assert (disease.db_refs == {'EFO': '0002618'})
Пример #6
0
def test_get_disease():
    disease_str = '(CANCER :DBNAME "pancreatic carcinoma" :DBID "EFO:0002618")'
    kl = KQMLList.from_string(disease_str)
    disease = DTDA_Module.get_disease(kl)
    assert(disease.disease_type == 'cancer')
    assert(disease.name == 'pancreatic carcinoma')
    assert(disease.db_refs == {'EFO': '0002618'})
Пример #7
0
 def respond_build_model(self, content_list):
     '''
     Response content to build-model request
     '''
     try:
         descr_arg = content_list.get_keyword_arg(':description')
         descr = descr_arg[0].to_string()
         descr = self.decode_description(descr)
         model = self.mra.build_model_from_ekb(descr)
     except Exception as e:
         raise InvalidModelDescriptionError(e)
     if model is None:
         raise InvalidModelDescriptionError
     self.get_context(model)
     self.models.append(model)
     model_id = len(self.models)
     model_enc = self.encode_model(model)
     try:
         model_diagram = self.get_model_diagram(model, model_id)
     except DiagramGenerationError as e:
         logger.error('Could not generate model diagram.')
         logger.error(e)
         model_diagram = ''
     except DiagramConversionError as e:
         logger.error('Could not save model diagram.')
         logger.error(e)
         model_diagram = ''
     reply_content =\
         KQMLList.from_string(
         '(SUCCESS :model-id %s :model "%s" :diagram "%s")' %\
             (model_id, model_enc, model_diagram))
     return reply_content
Пример #8
0
def test_get_time_interval_full():
    ts = '(:lower-bound 2 :upper-bound 4 :unit "hour")'
    lst = KQMLList.from_string(ts)
    ti = tra_module.get_time_interval(lst)
    assert ti.lb == 2 * units.hour
    assert ti.ub == 4 * units.hour
    assert ti.get_lb_seconds() == 7200
    assert ti.get_ub_seconds() == 14400
Пример #9
0
def test_apply_condition_multiple():
    model = _get_gk_model()
    lst = KQMLList.from_string('(:type "multiple" :value 2.5 ' +
                               ':quantity (:type "total" ' +
                               ':entity (:description "%s")))' % ekb_map2k1)
    mc = tra_module.get_molecular_condition(lst)
    apply_condition(model, mc)
    assert model.parameters['MAP2K1_0'].value == 250
Пример #10
0
def test_apply_condition_decrease():
    model = _get_gk_model()
    lst = KQMLList.from_string('(:type "decrease" ' +
                               ':quantity (:type "total" ' +
                               ':entity (:description "%s")))' % ekb_map2k1)
    mc = tra_module.get_molecular_condition(lst)
    pold = model.parameters['MAP2K1_0'].value
    apply_condition(model, mc)
    assert model.parameters['MAP2K1_0'].value < pold
Пример #11
0
def test_get_molecular_condition_multiple():
    lst = KQMLList.from_string('(:type "multiple" :value 2 ' +
                               ':quantity (:type "total" ' +
                               ':entity (:description "%s")))' % ekb_braf)
    mc = tra_module.get_molecular_condition(lst)
    assert mc.condition_type == 'multiple'
    assert mc.value == 2.0
    assert mc.quantity.quant_type == 'total'
    assert mc.quantity.entity.name == 'BRAF'
Пример #12
0
    def respond_simulate_model(self, content_list):
        '''
        Response content to simulate-model request
        '''
        model_str = content_list.get_keyword_arg(':model')
        try:
            #model_str = model_str.to_string()
            model = self.decode_model(model_str)
        except InvalidModelDescriptionError as e:
            logger.error(e)
            reply_content =\
                KQMLList.from_string('(FAILURE :reason INVALID_MODEL)')
            return reply_content
        except Exception as e:
            logger.error(e)
            reply_content =\
                KQMLList.from_string('(FAILURE :reason INVALID_MODEL)')
            return reply_content

        target_entity = content_list.get_keyword_arg(':target_entity')
        if target_entity is not None:
            target_entity = target_entity.to_string()[1:-1]
        else:
            reply_content =\
                KQMLList.from_string('(FAILURE :reason MISSING_PARAMETER)')
            return reply_content
        target_pattern = content_list.get_keyword_arg(':target_pattern')
        if target_pattern is not None:
            target_pattern = target_pattern.to_string().lower()
        else:
            reply_content =\
                KQMLList.from_string('(FAILURE :reason MISSING_PARAMETER)')
            return reply_content
        condition_entity = content_list.get_keyword_arg(':condition_entity')
        if condition_entity is not None:
            condition_entity = condition_entity.to_string()[1:-1]
        condition_type = content_list.get_keyword_arg(':condition_type')
        if condition_type is not None:
            condition_type = condition_type.to_string().lower()

        self.get_context(model)
        if condition_entity is None:
            target_match = self.mea.check_pattern(model, target_entity,
                                                  target_pattern)
        else:
            target_match = self.mea.compare_conditions(model, target_entity,
                                                       target_pattern,
                                                       condition_entity,
                                                       condition_type)
        target_match_str = 'TRUE' if target_match else 'FALSE'
        reply_content = KQMLList()
        reply_content.add('SUCCESS :content (:target_match %s)' %
                          target_match_str)
        return reply_content
Пример #13
0
def test_get_molecular_condition_exact():
    lst = KQMLList.from_string(
        '(:type "exact" :value (:value 0 :type "number") ' +
        ':quantity (:type "total" ' +
        ':entity (:description "%s")))' % ekb_braf)
    mc = tra_module.get_molecular_condition(lst)
    assert mc.condition_type == 'exact'
    assert mc.value.quant_type == 'number'
    assert mc.quantity.quant_type == 'total'
    assert mc.quantity.entity.name == 'BRAF'
Пример #14
0
def test_get_temporal_pattern_eventual():
    pattern_msg = '(:type "eventual_value" :entities ((:description ' + \
                    '"%s")) :value (:type "qualitative" :value "high"))' % \
                    ekb_complex
    lst = KQMLList.from_string(pattern_msg)
    pattern = tra_module.get_temporal_pattern(lst)
    assert pattern.pattern_type == 'eventual_value'
    assert pattern.value is not None
    assert pattern.value.quant_type == 'qualitative'
    assert pattern.value.value == 'high'
Пример #15
0
 def respond_version(self):
     '''
     Response content to version message
     '''
     response = self.kappa.version()
     reply_content = KQMLList.from_string(
         '(SUCCESS ' + ':VERSION "%s" ' % response['version'] +
         ':BUILD   "%s")' % response['build'])
     logger.debug(reply_content.to_string())
     return reply_content
Пример #16
0
def test_apply_condition_exact():
    model = _get_gk_model()
    lst = KQMLList.from_string(
        '(:type "exact" :value (:value 0 :type "number") ' +
        ':quantity (:type "total" ' +
        ':entity (:description "%s")))' % ekb_map2k1)
    mc = tra_module.get_molecular_condition(lst)
    apply_condition(model, mc)
    assert model.parameters['MAP2K1_0'].value == 0
    mc.value.value = 2000
    apply_condition(model, mc)
    assert model.parameters['MAP2K1_0'].value == 2000
Пример #17
0
    def respond_find_disease_targets(self, content_list):
        '''
        Response content to find-disease-targets request
        '''
        disease_arg = content_list.get_keyword_arg(':disease')
        try:
            disease = self.get_disease(disease_arg)
        except Exception as e:
            logger.error(e)
            msg_str = '(FAILURE :reason INVALID_DISEASE)'
            reply_content = KQMLList.from_string(msg_str)
            return reply_content

        if disease.disease_type != 'cancer':
            msg_str = '(FAILURE :reason DISEASE_NOT_FOUND)'
            reply_content = KQMLList.from_string(msg_str)
            return reply_content

        logger.debug('Disease: %s' % disease.name)

        try:
            mut_protein, mut_percent =\
                self.dtda.get_top_mutation(disease.name)
        except DiseaseNotFoundException:
            msg_str = '(FAILURE :reason DISEASE_NOT_FOUND)'
            reply_content = KQMLList.from_string(msg_str)
            return reply_content

        # TODO: get functional effect from actual mutations
        # TODO: add list of actual mutations to response
        # TODO: get fraction not percentage from DTDA
        reply_content =\
            KQMLList.from_string(
                '(SUCCESS ' +
                ':protein (:name %s :hgnc %s) ' % (mut_protein, mut_protein) +
                ':prevalence %.2f ' % (mut_percent/100.0) +
                ':functional-effect ACTIVE)')

        return reply_content
Пример #18
0
 def receive_request(self, msg, content):
     '''
     If a "request" message is received, decode the task and the content
     and call the appropriate function to prepare the response. A reply
     "tell" message is then sent back.
     '''
     try:
         task_str = content[0].to_string().upper()
     except Exception as e:
         logger.error('Could not get task string from request.')
         logger.error(e)
         self.error_reply(msg, 'Invalid task')
     if task_str == 'BUILD-MODEL':
         try:
             reply_content = self.respond_build_model(content)
         except InvalidModelDescriptionError as e:
             logger.error('Invalid model description.')
             logger.error(e)
             fail_msg = '(FAILURE :reason INVALID_DESCRIPTION)'
             reply_content = KQMLList.from_string(fail_msg)
     elif task_str == 'EXPAND-MODEL':
         try:
             reply_content = self.respond_expand_model(content)
         except InvalidModelIdError as e:
             logger.error('Invalid model ID.')
             logger.error(e)
             fail_msg = '(FAILURE :reason INVALID_MODEL_ID)'
             reply_content = KQMLList.from_string(fail_msg)
         except InvalidModelDescriptionError as e:
             logger.error('Invalid model description.')
             logger.error(e)
             fail_msg = '(FAILURE :reason INVALID_DESCRIPTION)'
             reply_content = KQMLList.from_string(fail_msg)
     else:
         self.error_reply(msg, 'Unknown task ' + task_str)
         return
     reply_msg = KQMLPerformative('reply')
     reply_msg.set_parameter(':content', reply_content)
     self.reply(msg, reply_msg)
Пример #19
0
 def respond_find_target_drug(self, content_list):
     '''
     Response content to find-target-drug request
     '''
     target = content_list.get_keyword_arg(':target')
     target_str = target.to_string()[1:-1]
     drug_names, chebi_ids = self.dtda.find_target_drugs(target_str)
     drug_list_str = ''
     for dn, ci in zip(drug_names, chebi_ids):
         if ci is None:
             drug_list_str += '(:name %s) ' % dn.encode('ascii', 'ignore')
         else:
             drug_list_str += '(:name %s :chebi_id %s) ' % (dn, ci)
     reply_content = KQMLList.from_string('(SUCCESS :drugs (' +
                                          drug_list_str + '))')
     return reply_content
Пример #20
0
    def respond_test(self):
        '''
        Response content to version message
        '''
        reply_content = KQMLList()
        version_response = KQMLList.from_string( '' +\
            '(ONT::TELL :content ' +\
            ')')

        reply_content.add(KQMLList(version_response))
        return reply_content
Пример #21
0
    def respond_expand_model(self, content_list):
        '''
        Response content to expand-model request
        '''
        try:
            descr_arg = content_list.get_keyword_arg(':description')
            descr = descr_arg[0].to_string()
            descr = self.decode_description(descr)
        except Exception as e:
            raise InvalidModelDescriptionError(e)
        model_id_arg = content_list.get_keyword_arg(':model-id')
        if model_id_arg is None:
            logger.error('Model ID missing.')
            raise InvalidModelIdError
        try:
            model_id_str = model_id_arg.to_string()
            model_id = int(model_id_str)
        except Exception as e:
            logger.error('Could not get model ID as integer.')
            raise InvalidModelIdError(e)
        if model_id < 1 or model_id > len(self.models):
            logger.error('Model ID does not refer to an existing model.')
            raise InvalidModelIdError

        try:
            model = self.mra.expand_model_from_ekb(descr, model_id)
        except Exception as e:
            raise InvalidModelDescriptionError
        self.get_context(model)
        self.models.append(model)
        new_model_id = len(self.models)
        model_enc = self.encode_model(model)
        try:
            model_diagram = self.get_model_diagram(model, new_model_id)
        except DiagramGenerationError:
            model_diagram = ''
        except DiagramConversionError:
            model_diagram = ''
        reply_content =\
            KQMLList.from_string(
            '(SUCCESS :model-id %s :model "%s" :diagram "%s")' %\
                (new_model_id, model_enc, model_diagram))
        return reply_content
Пример #22
0
 def respond_is_drug_target(self, content_list):
     '''
     Response content to is-drug-target request
     '''
     drug_arg = content_list.get_keyword_arg(':drug')
     drug = drug_arg[0].to_string()
     target_arg = content_list.get_keyword_arg(':target')
     target = target_arg[0].to_string()
     reply_content = KQMLList()
     try:
         is_target = self.dtda.is_nominal_drug_target(drug, target)
     except DrugNotFoundException:
         reply_content.add('FAILURE :reason DRUG_NOT_FOUND')
         return reply_content
     status = 'SUCCESS'
     if is_target:
         is_target_str = 'TRUE'
     else:
         is_target_str = 'FALSE'
     msg_str = '%s :is-target %s' %\
               (status, is_target_str)
     reply_content.add(msg_str)
     return reply_content
Пример #23
0
    def respond_find_treatment(self, content_list):
        '''
        Response content to find-treatment request
        '''
        reply_content = KQMLList()
        #TODO: eliminate code duplication here
        disease_arg = content_list.get_keyword_arg(':disease')
        try:
            disease = self.get_disease(disease_arg)
        except Exception as e:
            logger.error(e)
            msg_str = '(FAILURE :reason INVALID_DISEASE)'
            reply_content = KQMLList.from_string(msg_str)
            return reply_content

        if disease.disease_type != 'cancer':
            reply_content.add('FAILURE :reason DISEASE_NOT_FOUND')
            return reply_content

        logger.debug('Disease: %s' % disease.name)

        try:
            mut_protein, mut_percent = \
                self.dtda.get_top_mutation(disease.name)
        except DiseaseNotFoundException:
            reply_content.add('FAILURE :reason DISEASE_NOT_FOUND')
            return reply_content

        # TODO: get functional effect from actual mutations
        # TODO: add list of actual mutations to response
        # TODO: get fraction not percentage from DTDA
        reply_content.add(
            KQMLList.from_string('(SUCCESS ' +
                                 ':protein (:name %s :hgnc %s) ' %
                                 (mut_protein, mut_protein) +
                                 ':prevalence %.2f ' % (mut_percent / 100.0) +
                                 ':functional-effect ACTIVE)'))

        # Try to find a drug
        drug_names, chebi_ids = self.dtda.find_target_drugs(mut_protein)
        drug_list_str = ''
        for dn, ci in zip(drug_names, chebi_ids):
            if ci is None:
                drug_list_str += '(:name %s) ' % dn.encode('ascii', 'ignore')
            else:
                drug_list_str += '(:name %s :chebi_id %s) ' % (dn, ci)
        reply_content.add(
            KQMLList.from_string('(SUCCESS :drugs (' + drug_list_str + '))'))

        return reply_content
Пример #24
0
def test_molecular_quantity_qual():
    s = '(:type "qualitative" :value "high")'
    lst = KQMLList.from_string(s)
    mq = tra_module.get_molecular_quantity(lst)
    assert mq.quant_type == 'qualitative'
    assert mq.value == 'high'
Пример #25
0
def test_molecular_quantity_num_badval():
    s = '(:type "number" :value -1)'
    lst = KQMLList.from_string(s)
    mq = tra_module.get_molecular_quantity(lst)