コード例 #1
0
    def setup_items(self):
        self.model = Model()
        self.testcase = ModelTest(description="test_description")

        self.reaction1 = Reaction(id="r1")
        self.testsetting1 = ReactionSetting(self.reaction1,
                                            upper_bound=1000.,
                                            lower_bound=0.,
                                            objective_coefficient=0.)
        self.testcase.add_setting(self.testsetting1)

        self.reaction3 = Reaction(id="r3")
        self.outcome = Outcome(self.reaction3, value=100., operator="greater")
        self.testcase.add_outcome(self.outcome)

        self.reference = Reference(id="test_refid")
        self.testcase.add_reference(self.reference)

        self.model.add_reactions([self.reaction1, self.reaction3])
        self.model.references[self.reference.id] = self.reference

        self.model.tests.append(self.testcase)
        self.model.setup_tests_table()

        self.root = Element("root", nsmap={None: ge_ns})
        add_tests_to_xml(self.root, self.model)
コード例 #2
0
    def test_addition_emits_changed(self):
        parent = QWidget()
        widget = ReactionSettingDisplayWidget(parent)
        test = ModelTest()
        reaction = Reaction()
        setting = ReactionSetting(reaction, 1000., -1000., 5.)
        model = Model()

        test.add_setting(setting)
        widget.set_item(test, model)

        detector = Mock()
        widget.changed.connect(detector.test)

        widget.dataTable.update_row_from_item(
            ReactionSetting(Reaction(), 200., -200, 0.))
        assert detector.test.called is True
        assert widget.content_changed is True
コード例 #3
0
ファイル: tables.py プロジェクト: hongzhonglu/GEMEditor
    def item_from_row(self, row_idx):
        """ Return the setting object as represented in a table row """
        # Make sure the lower boundary is smaller than the upper
        bounds = (self.item(row_idx, 1).data(2), self.item(row_idx, 2).data(2))

        return ReactionSetting(reaction=self.item(row_idx, 0).link,
                               lower_bound=min(bounds),
                               upper_bound=max(bounds),
                               objective_coefficient=self.item(row_idx,
                                                               3).data(2))
コード例 #4
0
ファイル: model_test.py プロジェクト: hongzhonglu/GEMEditor
def _get_original_settings(model):
    """ Get all settings needed to prepare for test run

    In the preparation for running test cases care should
    be taken that:

    1) All objective coefficients should be set to 0
    2) All boundary reactions are producing only

    Both the active boundary reactions and the objective
    coefficients need to be specified in the settings of
    the test cases.

    Parameters
    ----------
    model: GEMEditor.model.classes.Model,
        Model context for the reactions


    Returns
    -------
    original_settings: list,
        List of settings that need to be executed in order
        to prepare the model for running tests, and should
        be reversed afterwards
    """

    original_settings = []

    for x in model.reactions:

        # Set all boundary reaction to producing only
        if all(v < 0. for v in x.metabolites.values()):
            original_settings.append(ReactionSetting(x, x.upper_bound, 0., 0.))
        elif all(v > 0. for v in x.metabolites.values()):
            original_settings.append(ReactionSetting(x, 0., x.lower_bound, 0.))
        # Set all objective coefficients to zero
        elif x.objective_coefficient != 0.:
            original_settings.append(ReactionSetting(x, x.upper_bound, x.lower_bound, 0.))

    return original_settings
コード例 #5
0
    def test_content_changed(self):
        parent = QWidget()
        widget = ReactionSettingDisplayWidget(parent)
        test = ModelTest()
        reaction = Reaction()
        setting = ReactionSetting(reaction, 1000., -1000., 5.)
        model = Model()

        test.add_setting(setting)
        widget.set_item(test, model)

        assert widget.content_changed is False
コード例 #6
0
    def setup_test(self):
        self.model = Model("id")
        self.metabolite1 = Metabolite("m1")
        self.metabolite2 = Metabolite("m2")

        self.reaction1 = Reaction("r1", lower_bound=-1000., upper_bound=1000.)
        self.model.add_reactions((self.reaction1, ))
        self.reaction1.objective_coefficient = 0.
        self.r1_init_setting = self.reaction1.get_setting()
        self.reaction1.add_metabolites({
            self.metabolite1: -1,
            self.metabolite2: 1
        })
        self.reaction1.flux_value = 50.
        self.setting1 = ReactionSetting(reaction=self.reaction1,
                                        upper_bound=0.,
                                        lower_bound=0.,
                                        objective_coefficient=1.)

        self.reaction2 = Reaction("r2", lower_bound=0., upper_bound=50.)
        self.model.add_reactions((self.reaction2, ))
        self.reaction2.objective_coefficient = 1.
        self.setting2 = ReactionSetting(reaction=self.reaction2,
                                        upper_bound=1000.,
                                        lower_bound=-1000.,
                                        objective_coefficient=0.)
        self.r2_init_setting = self.reaction2.get_setting()
        self.reaction2.add_metabolites({self.metabolite1: -1})

        self.true_outcome1 = Outcome(reaction=self.reaction1,
                                     value=15.,
                                     operator="less than")

        self.false_outcome1 = Outcome(reaction=self.reaction1,
                                      value=15.,
                                      operator="greater than")
コード例 #7
0
    def test_set_parameters(self):
        old_lb = -1000.
        old_ub = 1000.
        old_obj_value = 1.

        with patch(
                'GEMEditor.model.classes.cobra.Reaction.objective_coefficient',
                new_callable=PropertyMock) as objective_coefficient:
            objective_coefficient.return_value = old_obj_value
            reaction = Reaction("test_id",
                                lower_bound=old_lb,
                                upper_bound=old_ub)

            new_lb = -500.
            new_ub = 500.
            new_obj_value = 0.
            setting = ReactionSetting(reaction,
                                      upper_bound=new_ub,
                                      lower_bound=new_lb,
                                      objective_coefficient=new_obj_value)

            assert reaction.upper_bound == old_ub
            assert reaction.lower_bound == old_lb
            assert reaction.objective_coefficient == old_obj_value

            setting.do()

            assert reaction.upper_bound == new_ub
            assert reaction.lower_bound == new_lb
            assert objective_coefficient.call_args == call(new_obj_value)
            objective_coefficient.return_value = new_obj_value

            setting.undo()
            assert reaction.upper_bound == old_ub
            assert reaction.lower_bound == old_lb
            assert objective_coefficient.call_args == call(old_obj_value)
            objective_coefficient.return_value = old_obj_value

            # Check that calling undo a second time does not change the value
            prior_call_count = objective_coefficient.call_count
            setting.undo()
            assert reaction.upper_bound == old_ub
            assert reaction.lower_bound == old_lb
            assert objective_coefficient.call_count == prior_call_count
コード例 #8
0
    def test_modification_emits_changed(self):
        parent = QWidget()
        widget = ReactionSettingDisplayWidget(parent)
        test = ModelTest()
        reaction = Reaction()
        setting = ReactionSetting(reaction, 1000., -1000., 5.)
        model = Model()

        test.add_setting(setting)
        widget.set_item(test, model)

        detector = Mock()
        widget.changed.connect(detector.test)

        widget.dataTable.item(0, 1).setData(500, 2)
        assert detector.test.called is True
        assert widget.content_changed is True
コード例 #9
0
ファイル: test_cobra.py プロジェクト: hongzhonglu/GEMEditor
    def setup_complete_model(self):
        self.model = Model("model")

        # Setup reaction1
        self.metabolite = Metabolite("m1")
        self.reaction = Reaction("r1")
        self.gene = Gene("g1")
        self.reaction.add_child(self.gene)
        self.model.add_genes((self.gene,))
        self.reaction.add_metabolites({self.metabolite: -1})
        self.model.add_reactions((self.reaction,))

        # Setup reaction2
        self.metabolite2 = Metabolite("m2")
        self.reaction2 = Reaction("r2")
        self.gene2 = Gene("g2")
        self.genegroup = GeneGroup()
        self.genegroup.add_child(self.gene2)
        self.reaction2.add_child(self.genegroup)
        self.model.add_genes((self.gene2,))
        self.reaction2.add_metabolites({self.metabolite2: 1})
        self.model.add_reactions((self.reaction2,))

        # Setup evidences
        self.evidence = Evidence(assertion="Catalyzes")
        self.evidence.set_entity(self.gene)
        self.evidence.set_target(self.reaction)
        self.reference = Reference()
        self.model.add_reference(self.reference)
        self.evidence.add_reference(self.reference)
        self.model.add_evidence(self.evidence)

        # Setup test case
        self.testcase = ModelTest()
        reaction_setting = ReactionSetting(self.reaction, 1000., -1000., 0.)
        gene_setting = GeneSetting(gene=self.gene2, activity=False)
        outcome = Outcome(self.reaction2, 0., "greater")
        self.testcase.add_outcome(outcome)
        self.testcase.add_setting(gene_setting)
        self.testcase.add_setting(reaction_setting)
        self.model.add_test(self.testcase)
        self.reference2 = Reference()
        self.model.add_reference(self.reference2)
        self.testcase.add_reference(self.reference2)

        self.model.setup_tables()
コード例 #10
0
    def test_setting_item(self):
        parent = QWidget()
        widget = ReactionSettingDisplayWidget(parent)
        test = ModelTest()
        reaction = Reaction()
        setting = ReactionSetting(reaction, 1000., -1000., 5.)
        model = Model()

        test.add_setting(setting)

        widget.dataTable.populate_table = Mock()

        widget.set_item(test, model)

        widget.dataTable.populate_table.assert_called_once_with(
            test.reaction_settings)
        assert widget.model is model
        assert widget.model_test is test
コード例 #11
0
    def test_deletion_emits_changed(self):
        parent = QWidget()
        widget = ReactionSettingDisplayWidget(parent)
        test = ModelTest()
        reaction = Reaction()
        setting = ReactionSetting(reaction, 1000., -1000., 5.)
        model = Model()

        test.add_setting(setting)
        widget.set_item(test, model)

        detector = Mock()
        widget.changed.connect(detector.test)

        widget.tableView.selectRow(0)
        QtTest.QTest.mouseClick(widget.button_del_item, QtCore.Qt.LeftButton)
        assert widget.dataTable.rowCount() == 0
        assert detector.test.called is True
        assert widget.content_changed is True
コード例 #12
0
ファイル: test_tabs.py プロジェクト: hongzhonglu/GEMEditor
    def setup_items(self):
        self.tab = ModelTestsTab()
        self.model = Model()
        self.model.setup_tables()
        self.test_description = "Test_name"
        self.test_case = ModelTest(description=self.test_description)
        self.reaction1 = Reaction(id="r1")
        self.setting = ReactionSetting(reaction=self.reaction1,
                                       upper_bound=1000.,
                                       lower_bound=0.,
                                       objective_coefficient=0.)
        self.reaction2 = Reaction(id="r2")
        self.outcome = Outcome(reaction=self.reaction2,
                               value=0.,
                               operator="greater than")
        self.test_case.add_outcome(self.outcome)
        self.test_case.add_setting(self.setting)

        self.tab.set_model(self.model)
コード例 #13
0
    def test_saving_items(self):

        parent = QWidget()
        widget = ReactionSettingDisplayWidget(parent)
        test = ModelTest()
        reaction = Reaction()
        setting = ReactionSetting(reaction, 1000., -1000., 5.)
        model = Model()

        test.add_setting(setting)
        widget.set_item(test, model)

        new_test = ModelTest()
        widget.model_test = new_test

        assert len(new_test.reaction_settings) == 0
        widget.save_state()
        assert len(new_test.reaction_settings) == 1

        new_setting = list(new_test.reaction_settings)[0]

        assert new_setting == setting
        assert new_setting is not setting
コード例 #14
0
def parse_test_from_xml(model_node, model, progress=None):

    list_of_tests_node = model_node.find(ge_listOfTests)

    if list_of_tests_node is None:
        return
    elif progress is None:
        pass
    elif not progress.wasCanceled():
        progress.setLabelText("Reading test cases...")
        progress.setRange(0, len(list_of_tests_node))
    else:
        return

    for i, test_node in enumerate(list_of_tests_node.iterfind(ge_testCase)):

        if progress is None:
            pass
        elif not progress.wasCanceled():
            progress.setValue(i)
            QApplication.processEvents()
        else:
            return

        new_test = ModelTest(description=test_node.get("description"),
                             comment=test_node.get("comment"))

        settings_list_node = test_node.find(ge_listOfSettings)
        outcomes_list_node = test_node.find(ge_listOfOutcomes)
        reference_list_node = test_node.find(ge_listOfReferenceLinks)

        # Add settings
        if settings_list_node is not None:
            for setting_node in settings_list_node.iterfind(
                    ge_reactionSetting):
                reaction = model.reactions.get_by_id(
                    clip(setting_node.get("reactionId"), "R_"))
                new_setting = ReactionSetting(
                    reaction=reaction,
                    upper_bound=float(setting_node.get("upperBound")),
                    lower_bound=float(setting_node.get("lowerBound")),
                    objective_coefficient=float(
                        setting_node.get("objectiveCoefficient")))
                new_test.add_setting(new_setting)
            for gene_setting_node in settings_list_node.iterfind(
                    ge_geneSetting):
                gene = model.genes.get_by_id(
                    clip(gene_setting_node.get("geneId"), "G_"))
                new_setting = GeneSetting(gene)
                if gene_setting_node.get("active") == "True":
                    new_setting.activity = True
                elif gene_setting_node.get("active") == "False":
                    new_setting.activity = False
                else:
                    raise ValueError(
                        "Unexpected value for activity in gene setting.")
                new_test.add_setting(new_setting)

        # Add outcomes
        if outcomes_list_node is not None:
            for outcome_node in outcomes_list_node.iterfind(ge_outcome):
                reaction = model.reactions.get_by_id(
                    clip(outcome_node.get("reactionId"), "R_"))
                new_outcome = Outcome(reaction=reaction,
                                      value=float(outcome_node.get("value")),
                                      operator=outcome_node.get("operator"))
                new_test.add_outcome(new_outcome)

        # Add references
        if reference_list_node is not None:
            for refLink_node in reference_list_node.iterfind(ge_referenceLink):
                new_test.add_reference(
                    model.references[refLink_node.get("id")])

        model.tests.append(new_test)
コード例 #15
0
 def setup_items(self):
     self.test = ModelTest()
     self.outcome1 = Outcome()
     self.reaction_setting = ReactionSetting()
     self.gene_setting = GeneSetting()
     self.reference1 = Reference()
コード例 #16
0
 def get_setting(self):
     return ReactionSetting(
         reaction=self,
         upper_bound=self.upper_bound,
         lower_bound=self.lower_bound,
         objective_coefficient=self.objective_coefficient)