示例#1
0
    def test_gene_addition(self):
        reaction = Reaction("reaction_id")
        gene = Gene("gene_id")

        reaction.add_child(gene)
        assert gene in reaction.genes
        assert reaction in gene.reactions
示例#2
0
    def test_setting_reaction(self):
        widget = ReactionAttributesDisplayWidget()
        reaction = Reaction(id="id",
                            name="name",
                            subsystem="subsystem",
                            lower_bound=-1000.,
                            upper_bound=1000.)
        model = Model()
        model.add_reactions((reaction, ))
        reaction.objective_coefficient = 1.

        assert widget.idLineEdit.text() == ""
        assert widget.nameLineEdit.text() == ""
        assert widget.subsystemLineEdit.text() == ""
        assert widget.lowerBoundInput.value() == 0.
        assert widget.upperBoundInput.value() == 0.
        assert widget.objectiveCoefficientInput.value() == 0.
        assert widget.content_changed is False
        assert widget.valid_inputs() is False

        widget.set_item(reaction, model)
        assert widget.idLineEdit.text() == reaction.id
        assert widget.nameLineEdit.text() == reaction.name
        assert widget.subsystemLineEdit.text() == reaction.subsystem
        assert widget.lowerBoundInput.value() == reaction.lower_bound
        assert widget.upperBoundInput.value() == reaction.upper_bound
        assert widget.objectiveCoefficientInput.value(
        ) == reaction.objective_coefficient
        assert widget.content_changed is False
        assert widget.valid_inputs() is True
示例#3
0
    def test_setting_resetting_boundaries(self):
        gene = Gene()
        reaction = Reaction(lower_bound=-1000., upper_bound=1000.)
        reaction.add_child(gene)
        gene.functional = True

        condition = GeneSetting(gene, False)

        assert gene.functional is True
        assert reaction.upper_bound == 1000.
        assert reaction.lower_bound == -1000.

        condition.do()

        assert gene.functional is False
        assert reaction.upper_bound == 0.
        assert reaction.lower_bound == 0.

        condition.undo()

        assert gene.functional is True
        assert reaction.upper_bound == 1000.
        assert reaction.lower_bound == -1000.

        # Check that calling undo second time does not change value
        condition.undo()

        assert gene.functional is True
        assert reaction.upper_bound == 1000.
        assert reaction.lower_bound == -1000.
示例#4
0
    def test_reaction_is_disabled_with_disabled_gene_only(self):
        reaction = Reaction()
        gene = Gene()
        gene.functional = False
        reaction.add_child(gene)

        assert reaction.functional is False
示例#5
0
class TestAssertionCatalyzingReaction:
    @pytest.fixture(autouse=True)
    def setup_items(self):
        self.reaction = Reaction("r1")
        self.gene = Gene("g1")
        self.evidence = Evidence(entity=self.gene,
                                 target=self.reaction,
                                 assertion="Catalyzing reaction")

    def test_valid_if_gene_in_reaction(self):
        self.reaction.add_child(self.gene)

        assert self.evidence.is_valid() is True

    def test_invalid_if_gene_not_in_reaction(self):
        assert self.evidence.is_valid() is False

    def test_gene_needed(self):
        evidence = Evidence(entity=self.gene, assertion="Catalyzing reaction")
        assert evidence.is_valid() is None

    def test_reaction_needed(self):
        evidence = Evidence(target=self.reaction,
                            assertion="Catalyzing reaction")
        assert evidence.is_valid() is None

    def test_fix_gene_added(self):
        assert self.gene not in self.reaction.genes

        status = self.evidence.fix()

        assert status is True
        assert self.gene in self.reaction.genes
    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)
示例#7
0
    def test_reaction_is_disabled_with_gene_in_and_group(self):
        reaction = Reaction()
        genegroup = GeneGroup(type="and")
        reaction.add_child(genegroup)
        gene = Gene()
        genegroup.add_child(gene)
        gene.functional = False

        assert reaction.functional is False
示例#8
0
 def setup_item(self):
     self.test_id = "test_id"
     self.test_name = "test_name"
     self.test_upper_bound = 1000.
     self.test_lower_bound = -1000.
     self.reaction = Reaction(id=self.test_id,
                              name=self.test_name,
                              lower_bound=self.test_lower_bound,
                              upper_bound=self.test_upper_bound)
示例#9
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()
示例#10
0
    def setup_items(self):

        self.parent = QWidget()
        self.widget = StoichiometryDisplayWidget(self.parent)
        self.test_met_id = "test_id"
        self.test_react_id = "test_id2"
        self.test_stoich = -1.5
        self.metabolite = Metabolite(id=self.test_met_id)
        self.reaction = Reaction(id=self.test_react_id)
        self.reaction.add_metabolites({self.metabolite: self.test_stoich})
        self.model = Model("test")
示例#11
0
    def test_removal_empty_genegroup(self):
        reaction = Reaction("r1")
        gene_group = GeneGroup()
        reaction.add_child(gene_group)

        assert gene_group in reaction._children
        assert reaction in gene_group._parents
        prune_gene_tree(reaction)

        assert gene_group not in reaction._children
        assert reaction not in gene_group._parents
示例#12
0
class TestReactionTable:
    @pytest.fixture(autouse=True)
    def setup_items(self):
        self.table = ReactionTable()
        self.test_id = "test_id"
        self.test_name = "test_name"
        self.test_subsystem = "test_subsystemm"
        self.test_ub = 1500.5
        self.test_lb = 500.5
        self.test_obj_coeff = 0.
        self.test_item = Reaction(id=self.test_id,
                                  name=self.test_name,
                                  subsystem=self.test_subsystem,
                                  upper_bound=self.test_ub,
                                  lower_bound=self.test_lb)

    def test_setup(self):
        # Test header settings
        for i, text in enumerate(self.table.header):
            assert self.table.horizontalHeaderItem(i).text() == text

        assert self.table.rowCount() == 0

    def test_row_from_item(self):
        return_values = self.table.row_from_item(self.test_item)

        assert return_values[0].text() == self.test_id
        assert return_values[1].text() == self.test_name
        # Fromula not set
        assert return_values[2].text() == self.test_item.build_reaction_string(
        )
        assert return_values[3].text() == self.test_subsystem
        assert return_values[4].text() == str(self.test_lb)
        assert return_values[5].text() == str(self.test_ub)
        assert float(return_values[6].text()) == self.test_obj_coeff

    def test_update_row_(self):
        assert self.table.rowCount() == 0
        self.table.update_row_from_item(self.test_item)
        assert self.table.rowCount() == 1
        assert self.table.item(0, 0).text() == self.test_id
        assert self.table.item(0, 1).text() == self.test_name
        assert self.table.item(
            0, 2).text() == self.test_item.build_reaction_string()
        assert self.table.item(0, 3).text() == self.test_subsystem
        assert self.table.item(0, 4).text() == str(self.test_lb)
        assert self.table.item(0, 5).text() == str(self.test_ub)
        assert float(self.table.item(0, 6).text()) == self.test_obj_coeff

    def test_item_from_row(self):
        self.table.update_row_from_item(self.test_item)
        assert self.table.rowCount() == 1
        assert self.table.item_from_row(0) is self.test_item
示例#13
0
    def test_no_update_if_boundary(self):
        """ Check that formula is not updated when metabolite is
        part of a boundary reaction """

        react = Reaction("rea")
        met1 = Metabolite("met1")
        react.add_metabolites({met1: -1})

        result = update_formula_from_neighborhood(met1)

        assert result is False
        assert not met1.formula
示例#14
0
 def setup_items(self):
     self.table = ReactionTable()
     self.test_id = "test_id"
     self.test_name = "test_name"
     self.test_subsystem = "test_subsystemm"
     self.test_ub = 1500.5
     self.test_lb = 500.5
     self.test_obj_coeff = 0.
     self.test_item = Reaction(id=self.test_id,
                               name=self.test_name,
                               subsystem=self.test_subsystem,
                               upper_bound=self.test_ub,
                               lower_bound=self.test_lb)
示例#15
0
class TestOutcomes:
    @pytest.fixture(autouse=True)
    def setup_items(self):
        self.outcome = Outcome()
        self.solution = Mock()

    def test_setup(self):
        assert self.outcome.reaction is None
        assert self.outcome.value is None
        assert self.outcome.operator is None

    def test_check_solution(self):
        reaction_id = "test_id"
        reaction = Reaction(reaction_id)
        fluxes = {reaction_id: 5.}

        new_outcome = Outcome(reaction, value=0., operator="greater than")
        assert new_outcome.check(fluxes) is True
        fluxes = {reaction_id: 0.}
        assert new_outcome.check(fluxes) is False

        new_outcome.operator = "less than"
        assert new_outcome.check(fluxes) is False
        new_outcome.value = 10.
        assert new_outcome.check(fluxes) is True

        new_outcome.operator = ""
        assert new_outcome.check(fluxes) is False

    def test_empty_outcome_is_not_valid(self):
        assert self.outcome.is_valid() is False

    def test_no_operator_set_is_invalid(self):
        self.outcome.reaction = Reaction()
        self.outcome.value = 0.

        assert self.outcome.operator is None
        assert self.outcome.is_valid() is False

    @pytest.mark.parametrize("parameters",
                             [(Reaction(), 0., "greater than", True),
                              (None, 0., "greater than", False),
                              (Reaction(), None, "greater than", False),
                              (Reaction(), 0., None, False),
                              (None, None, None, False)])
    def test_outcome_is_valid(self, parameters):
        outcome = Outcome(reaction=parameters[0],
                          value=parameters[1],
                          operator=parameters[2])

        assert outcome.is_valid() is parameters[3]
示例#16
0
    def test_sorting_valid(self):
        reaction = Reaction()
        gene = Gene()
        evidence = Evidence(entity=gene,
                            target=reaction,
                            assertion="Catalyzing reaction")
        reaction.add_child(gene)

        assert evidence.is_valid() is True

        conflicts, failing, errors = sort_evidences([evidence])
        assert not conflicts
        assert not failing
        assert not errors
示例#17
0
 def test_gene_and_gene_group(self):
     gene1 = Gene("gene 1")
     gene2 = Gene("gene 2")
     gene3 = Gene("gene 3")
     genegroup1 = GeneGroup(type="and")
     genegroup2 = GeneGroup(type="or")
     reaction = Reaction()
     reaction.add_child(genegroup1)
     genegroup1.add_child(gene1)
     genegroup1.add_child(genegroup2)
     genegroup2.add_child(gene2)
     assert reaction.gene_reaction_rule == gene1.id+" and "+gene2.id
     genegroup2.add_child(gene3)
     assert reaction.gene_reaction_rule == gene1.id+" and ("+gene2.id+" or "+gene3.id+")"
示例#18
0
    def test_no_update_if_mutliple_metabolites_wo_formula(self):
        """ Check that formula is not updated if multiple metabolites
        have no formula set """

        react = Reaction("rea")
        met1 = Metabolite("met1", formula="C7H8O2")
        met2 = Metabolite("met2")
        met3 = Metabolite("met3")
        react.add_metabolites({met1: 1, met3: 1, met2: -1})

        result = update_formula_from_neighborhood(met3)

        assert result is False
        assert not met3.formula
示例#19
0
    def test_successful_update(self):
        """ Check that metabolite formula is successfully updated
        from a reaction where all other metabolite formulae are set """

        react = Reaction("rea")
        met1 = Metabolite("met1", formula="C7H8O2")
        met2 = Metabolite("met2", formula="C8H8O4")
        met3 = Metabolite("met3")
        react.add_metabolites({met1: 1, met3: 1, met2: -1})

        result = update_formula_from_neighborhood(met3)

        assert result is True
        assert met3.formula == "CO2"
示例#20
0
 def setup_items(self):
     self.table = ModelTestTable()
     self.reaction1 = Reaction("test")
     self.reaction2 = Reaction("test2")
     self.outcome = Outcome(reaction=self.reaction1,
                            value=0.,
                            operator="greater than")
     self.setting = ReactionSetting(reaction=self.reaction2,
                                    upper_bound=1000.,
                                    lower_bound=0.,
                                    objective_coefficient=0.)
     self.model_test = ModelTest(description="test case")
     self.model_test.add_outcome(self.outcome)
     self.model_test.add_setting(self.setting)
示例#21
0
    def test_no_map_by_stoichiometry_if_any_metabolite_not_mapped(
            self, database, progress):
        model = Model()
        met1 = Metabolite("m1")
        met2 = Metabolite("m2")
        model.add_metabolites((met1, met2))
        model.database_mapping.update({met1: 1})

        reaction = Reaction("r1")
        reaction.add_metabolites({met1: -1, met2: -1})
        model.add_reactions([reaction])

        update_reaction_database_mapping(database, model, progress)
        assert reaction not in model.database_mapping
示例#22
0
    def test_removal_of_genegroup_with_one_child(self, type):
        reaction = Reaction("r1")
        gene_group = GeneGroup(type=type)
        gene = Gene()
        reaction.add_child(gene_group)
        gene_group.add_child(gene)

        assert gene_group in reaction._children
        assert reaction in gene_group._parents
        assert gene in reaction.genes
        prune_gene_tree(reaction)

        assert gene_group not in reaction._children
        assert reaction not in gene_group._parents
        assert gene in reaction.genes
示例#23
0
    def test_balancing_status2(self):
        charge = 0
        formula = "H2O"

        met1 = Metabolite("test1", charge=charge, formula=formula)
        met2 = Metabolite("test2", charge=charge, formula=formula)
        stoichiometry = 1
        reaction = Reaction("test")
        reaction.add_metabolites({met1: stoichiometry, met2: -stoichiometry})
        self.widget.set_item(reaction, self.model)

        assert self.widget.statusLabel.toolTip(
        ) == self.widget.msg_standard.format(status="balanced",
                                             charge="OK",
                                             elements="OK")
示例#24
0
    def test_map_reaction_by_stoichiometry(self, database, progress):
        model = Model()
        met1 = Metabolite("m1")
        met2 = Metabolite("m2")
        met3 = Metabolite("m3")
        met4 = Metabolite("m4")
        model.add_metabolites((met1, met2, met3, met4))
        model.database_mapping.update({met1: 1, met2: 2, met3: 3, met4: 4})
        reaction = Reaction("r1")
        reaction.add_metabolites({met1: -1, met2: -1, met3: 1, met4: 1})
        model.add_reactions([reaction])

        update_reaction_database_mapping(database, model, progress)

        assert model.database_mapping[reaction] == 1
示例#25
0
    def test_map_reaction_by_annotation(self, database, progress):
        model = Model()
        met1 = Metabolite("m1")
        met2 = Metabolite("m2")
        model.add_metabolites([met1, met2])

        reaction = Reaction("r1")
        reaction.add_metabolites({met1: -1, met2: 1})
        reaction.annotation.add(
            Annotation(identifier="MNXR14892", collection="metanetx.reaction"))
        model.add_reactions([reaction])

        update_reaction_database_mapping(database, model, progress)

        assert model.database_mapping[reaction] == 1
示例#26
0
    def setup_items(self):
        self.gene = Gene("g1")
        self.compartment = Compartment("c")
        self.metabolite1 = Metabolite("m1")
        self.metabolite2 = Metabolite("m2")
        self.reaction = Reaction("r1")
        self.reaction.add_metabolites({
            self.metabolite1: -1,
            self.metabolite2: 1
        })
        self.reaction.add_child(self.gene)

        self.evidence = Evidence(entity=self.gene,
                                 assertion="Localization",
                                 target=self.compartment)
示例#27
0
    def test_copy_evidence(self):
        entity = Reaction()
        target = Gene()
        eco = "ECO:000000"
        assertion = "Presence"
        comment = "test comment"
        reference = Reference()
        evidence = Evidence(entity=entity,
                            eco=eco,
                            assertion=assertion,
                            comment=comment,
                            target=target)
        evidence.add_reference(reference)

        # Create copy
        copy = evidence.copy()

        # Check the correctness of the copy
        assert evidence.entity is copy.entity
        assert evidence.target is copy.target
        assert evidence.eco == copy.eco
        assert evidence.assertion == copy.assertion
        assert evidence.comment == copy.comment
        assert evidence.references == copy.references
        assert evidence.references is not copy.references

        # Check that the copy is not linked
        assert copy not in entity.evidences
        assert copy not in reference.linked_items
        assert copy not in target.evidences
示例#28
0
 def addItemSlot(self):
     new_reaction = Reaction()
     dialog = EditReactionDialog(new_reaction, self.model, parent=self)
     status = dialog.exec_()
     if status:
         self.model.add_reaction(new_reaction)
         self.dataTable.update_row_from_item(new_reaction)
示例#29
0
    def test_evidence_init(self):
        entity = Reaction()
        target = Gene("id2")
        eco = "ECO:000000"
        assertion = "Presence"
        comment = "test comment"
        reference = Reference()
        evidence = Evidence(entity=entity,
                            eco=eco,
                            assertion=assertion,
                            comment=comment,
                            target=target)
        evidence.add_reference(reference)

        # Check proper linking
        assert evidence.entity is entity
        assert evidence in entity.evidences
        assert evidence.target is target
        assert evidence in target.evidences

        # Check attributes
        assert evidence.assertion == assertion
        assert evidence.eco == eco
        assert evidence.comment == comment

        # Check id is set
        assert type(evidence.internal_id) is str
        assert evidence.internal_id != ""

        # Check the references
        assert reference in evidence.references
        assert evidence in reference.linked_items
示例#30
0
    def setup_items(self):
        self.table = OutcomesTable()

        self.reaction1 = Reaction(id="test_reaction1")
        self.outcome1_value = 1.5
        self.outcome1_operator = "greater than"
        self.outcome1 = Outcome(reaction=self.reaction1,
                                value=self.outcome1_value,
                                operator=self.outcome1_operator)

        self.reaction2 = Reaction(id="test_reaction2")
        self.outcome2_value = 100.5
        self.outcome2_operator = "less than"
        self.outcome2 = Outcome(reaction=self.reaction2,
                                value=self.outcome2_value,
                                operator=self.outcome2_operator)