Пример #1
0
    def test_full_example(self):
        """ Test that a minimal evidence example is parsed correctly """

        xml_tree = ET.fromstring(full_evidence)
        model = Model()
        reaction = Reaction("Test")
        target_item = Gene("target_id")
        reference = Reference("ref_id")
        model.add_reaction(reaction)
        model.add_gene(target_item)
        model.add_reference(reference)

        assert len(model.all_evidences) == 0
        assert len(reaction.evidences) == 0

        parse_evidences_from_xml(xml_tree, model)

        assert len(model.all_evidences) == 1
        assert len(reaction.evidences) == 1

        evidence = list(reaction.evidences)[0]
        assert evidence.entity is reaction
        assert evidence.target is target_item
        assert evidence.assertion == "Catalyzed by"
        assert evidence.eco == "ECO:0000000"
        assert len(evidence.references) == 1
        assert list(evidence.references)[0] is reference
        assert evidence.comment == "test comment"
Пример #2
0
    def test_deletion(self, user_response):
        tab = ReferenceTab()
        model = Model()
        reference1 = Reference("r1")
        reference2 = Reference("r2")
        reference3 = Reference("r3")
        model.add_reference(reference1)
        model.add_reference(reference2)
        model.add_reference(reference3)
        model.setup_reference_table()
        assert len(model.references) == model.QtReferenceTable.rowCount() == 3
        tab.set_model(model)
        tab.confirmDeletion = Mock(return_value=user_response)

        item = tab.dataTable.item(1, 0)
        selected_reference = item.link
        source_index = tab.dataTable.indexFromItem(item)
        view_index = tab.proxyModel.mapFromSource(source_index)
        tab.dataView.selectRow(view_index.row())

        assert tab.confirmDeletion.called is False
        tab.deleteItemSlot()
        assert tab.confirmDeletion.called is True
        assert (selected_reference.id in model.references) is not user_response
        if user_response:
            assert len(
                model.references) == model.QtReferenceTable.rowCount() == 2
Пример #3
0
    def test_get_item_from_model(self):
        model = Model("test id")
        reaction = Reaction("r_id")
        metabolite = Metabolite("m_id")
        gene = Gene("g_id")
        # ToDo: Add gene group

        model.add_reactions([reaction])
        model.add_metabolites([metabolite]),
        model.add_gene(gene)
        # ToDo: Add gene group

        assert get_item_from_model("Model", model.id, model) is model
        assert get_item_from_model("Reaction", reaction.id, model) is reaction
        assert get_item_from_model("Metabolite", metabolite.id, model) is metabolite
        assert get_item_from_model("Gene", gene.id, model) is gene

        # Test expected errors

        # GeneGroup not implemented
        with pytest.raises(NotImplementedError):
            get_item_from_model("GeneGroup", "test_id", model)

        # ID not in model
        with pytest.raises(KeyError):
            get_item_from_model("Reaction", "Not in model", model)
        with pytest.raises(KeyError):
            get_item_from_model("Metabolite", "Not in model", model)
        with pytest.raises(KeyError):
            get_item_from_model("Gene", "Not in model", model)
Пример #4
0
    def test_setting_objective_value(self):
        widget = ReactionAttributesDisplayWidget()
        model = Model()
        reaction = Reaction(id="test")
        model.add_reactions((reaction, ))
        widget.set_item(reaction, model)

        new_value = 1.
        assert reaction.objective_coefficient != new_value
        widget.objectiveCoefficientInput.clear()
        QtTest.QTest.keyClicks(widget.objectiveCoefficientInput,
                               str(new_value))
        assert widget.objectiveCoefficientInput.value() == new_value
        assert widget.content_changed is True
        assert widget.valid_inputs() is True
Пример #5
0
def test_add_compartments_defined_in_metabolite():
    model = Model()
    metabolite = Metabolite(id="test", compartment="c")
    model.add_metabolites([metabolite])

    root = Element("Root")
    add_compartments(root, model)

    compartment_list = root.find(sbml3_listOfCompartments)
    assert compartment_list is not None

    compartment = compartment_list.find(sbml3_compartment)
    assert compartment is not None
    assert compartment.get("id") == "c"
    assert compartment.get("name") is None
Пример #6
0
    def test_write_parse_consistency(self):
        add_evidences_to_xml(self.root, self.model)

        model = Model("New model")
        model.add_gene(self.gene)
        model.add_gene(self.target)
        model.add_reactions([self.reaction])
        model.add_reference(self.reference)

        assert len(model.all_evidences) == 0
        parse_evidences_from_xml(self.root, model)
        assert len(model.all_evidences) == 1

        evidence = model.all_evidences[self.evidence.internal_id]
        assert evidence == self.evidence
Пример #7
0
    def test_save_state_new_metabolite(self):
        metabolite = Metabolite()
        model = Model()

        widget = MetaboliteAttributesDisplayWidget()
        widget.set_item(metabolite, model)

        new_id = "New"
        new_name = "Name"
        new_charge = 2.
        new_formula = "H20"
        new_compartment = "c"

        widget.iDLineEdit.setText(new_id)
        widget.nameLineEdit.setText(new_name)
        widget.chargeSpinBox.setValue(new_charge)
        widget.formulaLineEdit.setText(new_formula)
        widget.compartmentComboBox.addItem(new_compartment)
        widget.compartmentComboBox.setCurrentText(new_compartment)

        widget.save_state()

        assert metabolite.id == new_id
        assert metabolite.name == new_name
        assert metabolite.charge == new_charge
        assert metabolite.formula == new_formula
        assert metabolite.compartment == new_compartment

        assert metabolite in model.metabolites
        assert metabolite in model.QtMetaboliteTable.get_items()
Пример #8
0
    def test_setting_item(self):
        metabolite = Metabolite("test_id", "H2O", "Test metabolie", -5, "m")
        model = Model()

        widget = MetaboliteAttributesDisplayWidget()

        # Test prestate
        assert widget.iDLineEdit.text() == ""
        assert widget.nameLineEdit.text() == ""
        assert widget.compartmentComboBox.currentText() == ""
        assert widget.chargeSpinBox.value() == 0
        assert widget.formulaLineEdit.text() == ""

        widget.set_item(metabolite, model)

        assert widget.iDLineEdit.text() == metabolite.id
        assert widget.nameLineEdit.text() == metabolite.name
        assert widget.compartmentComboBox.currentText(
        ) == metabolite.compartment
        assert widget.chargeSpinBox.value() == metabolite.charge
        assert widget.formulaLineEdit.text() == metabolite.formula

        assert widget.valid_inputs() is True
        assert widget.content_changed is False

        widget.set_item(None, model)

        assert widget.iDLineEdit.text() == ""
        assert widget.nameLineEdit.text() == ""
        assert widget.compartmentComboBox.currentText() == ""
        assert widget.chargeSpinBox.value() == 0.
        assert widget.formulaLineEdit.text() == ""

        assert widget.valid_inputs() is False
        assert widget.content_changed is False
Пример #9
0
    def test_writing_empty_model(self):

        root = Element("root")
        model = Model()
        add_tests_to_xml(root, model)

        assert len(root) == 0
Пример #10
0
    def test_run_test_false_outcome2(self, progress):
        model_test = ModelTest()
        model_test.outcomes = [self.true_outcome1, self.false_outcome1]

        results = run_tests((model_test, ), Model(), progress)
        status, _ = results[model_test]
        assert status is False
Пример #11
0
    def test_setting_item(self):
        gene = Gene("test_id", "name", "genome")
        model = Model()

        widget = GeneAttributesDisplayWidget()

        # Test prestate
        assert widget.iDLineEdit.text() == ""
        assert widget.nameLineEdit.text() == ""
        assert widget.genomeLineEdit.text() == ""

        widget.set_item(gene, model)

        assert widget.iDLineEdit.text() == gene.id
        assert widget.nameLineEdit.text() == gene.name
        assert widget.genomeLineEdit.text() == gene.genome

        assert widget.valid_inputs() is True
        assert widget.content_changed is False

        widget.set_item(None, model)

        assert widget.iDLineEdit.text() == ""
        assert widget.nameLineEdit.text() == ""
        assert widget.genomeLineEdit.text() == ""

        assert widget.valid_inputs() is False
        assert widget.content_changed is False
Пример #12
0
 def setup_items(self):
     self.first_author = Author(lastname="FirstLastname",
                            firstname="FirstFirstname",
                            initials="FirstInitials")
     self.second_author = Author(lastname="SecondLastname",
                            firstname="SecondFirstname",
                            initials="SecondInitials")
     self.authors = [self.first_author, self.second_author]
     self.test_pmid = "123456"
     self.test_pmc = "PMC12345"
     self.test_doi = "10.1016/j.chemosphere.2016.03.102"
     self.test_url = "http://google.com"
     self.test_year = "1999"
     self.test_title = "Test title"
     self.test_journal = "Test journal"
     self.test_ref_id = "Test_id"
     self.reference = Reference(id=self.test_ref_id,
                                pmid=self.test_pmid,
                                pmc=self.test_pmc,
                                doi=self.test_doi,
                                url=self.test_url,
                                year=self.test_year,
                                title=self.test_title,
                                journal=self.test_journal,
                                authors=self.authors)
     self.model = Model("Test")
     self.model.references[self.reference.id] = self.reference
Пример #13
0
 def test_close_model_model_cancel(self, mock_close_model):
     main_window = mock_close_model
     main_window.model = Model()
     assert main_window.close_model() is False
     assert main_window.save_table_headers.called is False
     assert main_window._set_model_loaded.called is False
     assert main_window.set_model.called is False
Пример #14
0
 def test_close_model_model_accept(self, mock_close_model):
     main_window = mock_close_model
     main_window.model = Model()
     assert main_window.close_model() is True
     assert main_window.save_table_headers.call_count == 1
     main_window._set_model_loaded.assert_called_once_with(False)
     main_window.set_model.assert_called_once_with(None, None)
Пример #15
0
 def setup_items(self):
     self.test_id = "Test_id"
     self.test_name = "Test_name"
     self.model = Model(self.test_id, self.test_name)
     self.parent = QWidget()
     self.comp1_name = "Cytoplasm"
     self.comp1_id = "c"
     self.new_comp_id = "n"
     self.new_comp_name = "Nucleus"
     self.new_comp = Compartment(self.new_comp_id, self.new_comp_name)
     self.comp1 = Compartment(self.comp1_id, self.comp1_name)
     self.model.gem_compartments[self.comp1_id] = self.comp1
     self.metabolite = Metabolite("test", compartment=self.comp1_id)
     self.model.add_metabolites([self.metabolite])
     self.model.setup_tables()
     self.dialog = EditModelDialog(model=self.model)
Пример #16
0
class TestModelTestsTab:
    @pytest.fixture()
    def patched_remove_tests(self, monkeypatch):
        mock = Mock()
        monkeypatch.setattr(
            "GEMEditor.model.classes.cobra.Model.gem_remove_tests", mock)
        return mock

    @pytest.fixture(autouse=True)
    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)

    def test_setup_items(self):
        assert self.model.QtTestsTable is not None
        assert self.model.QtTestsTable.rowCount() == 0

        assert self.tab.model is self.model

    @pytest.mark.parametrize("user_response", [True, False])
    def test_user_asked_upon_deletion(self, user_response,
                                      patched_remove_tests):
        tab = ModelTestsTab()
        tab.set_model(Model())
        tab.confirmDeletion = Mock(return_value=user_response)
        tab.dataView.delete_selected_rows = Mock()
        assert tab.confirmDeletion.called is False
        assert patched_remove_tests.called is False
        tab.deleteItemSlot()
        assert tab.confirmDeletion.called is True
        assert patched_remove_tests.called is user_response
Пример #17
0
    def test_description_loaded(self):

        test = ModelTest(description="Test description")
        model = Model()

        self.dialog.set_test(test, model)

        assert self.dialog.nameLineEdit.text() == test.description
Пример #18
0
 def test_get_selected_item_none_selected(self):
     reaction = Reaction()
     model = Model()
     self.widget.set_item(reaction, model)
     assert self.widget.geneTable.rowCount() == 0
     table_item, linked_item = self.widget.get_selected_item()
     assert table_item is self.widget.geneTable
     assert linked_item is reaction
Пример #19
0
    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()
Пример #20
0
 def new_model(self):
     if self.close_model():
         model = Model()
         dialog = EditModelDialog(model)
         status = dialog.exec_()
         if status:
             self.set_model(model, None)
             self._set_model_loaded(True)
Пример #21
0
 def setup_items(self):
     self.model = Model("Test")
     self.c1 = Compartment(id="c", name="Cytoplasm")
     self.c2 = Compartment(id="e", name="Extracellular")
     self.model.gem_compartments[self.c1.id] = self.c1
     self.compartment_table = CompartmentTable()
     self.compartment_table.populate_table(self.model.gem_compartments.values())
     self.wrong_format_abbreviation = "ca"
Пример #22
0
def test_parse_compartments():
    parent_node = ET.fromstring(valid_compartment_list)
    model = Model()
    parse_compartments(parent_node, model)

    assert model.gem_compartments["p"] == Compartment("p", "Periplasm")
    assert model.gem_compartments["c"] == Compartment("c", "Cytoplasm")
    assert model.gem_compartments["e"] == Compartment("e", "Extracellular")
Пример #23
0
def test_add_compartment_empty_model():
    model = Model()

    root = Element("root")
    add_compartments(root, model)

    compartment_list = root.find(sbml3_listOfCompartments)
    assert compartment_list is None
Пример #24
0
    def test_run_test_infeasible_solution(self, mock_optimize_infeasible,
                                          progress):
        model_test = ModelTest()
        model_test.outcomes = [self.true_outcome1, self.false_outcome1]

        results = run_tests((model_test, ), Model(), progress)
        status, solution = results[model_test]
        assert solution is mock_optimize_infeasible
        assert status is False
Пример #25
0
 def setup_items(self):
     self.test_id = "test.id"
     self.test_name = "test_name"
     self.test_genome = "test_genome"
     self.gene = Gene(id=self.test_id,
                      name=self.test_name,
                      genome=self.test_genome)
     self.model = Model("Test_model")
     self.model.genes.append(self.gene)
Пример #26
0
    def setup_items(self):
        self.parent = QWidget()
        self.widget = AnnotationDisplayWidget(self.parent)
        self.empty_reaction = Reaction()

        self.annotated_reaction = Reaction()
        self.annotation = Annotation("chebi", "CHEBI:123454")
        self.annotated_reaction.annotation.add(self.annotation)
        self.model = Model()
Пример #27
0
    def test_reaction_enormous_bounds(self):
        widget = ReactionAttributesDisplayWidget()
        model = Model()
        reaction = Reaction(id="test", lower_bound=-999999, upper_bound=999999)
        widget.set_item(reaction, model)

        assert widget.lowerBoundInput.value() == -999999
        assert widget.upperBoundInput.value() == 999999
        assert widget.lowerBoundInput.minimum() == -999999
        assert widget.upperBoundInput.maximum() == 999999
Пример #28
0
    def test_valid_input(self):
        reaction = Reaction(id="test")
        model = Model()

        widget = ReactionAttributesDisplayWidget()

        widget.set_item(reaction, model)
        assert widget.valid_inputs() is True
        widget.idLineEdit.clear()
        assert widget.valid_inputs() is False
Пример #29
0
    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)
Пример #30
0
def parse_sbml3_model(sbml_node):

    if sbml_node is not None:
        model_node = sbml_node.find(sbml3_model)
        if model_node is not None:
            model = Model(id_or_model=model_node.get("id"),
                          name=model_node.get("name"))

            return model_node, model
    return None