File: test_modify.py

package info (click to toggle)
python-cobra 0.29.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,512 kB
  • sloc: python: 14,703; xml: 12,841; makefile: 137; sh: 32
file content (105 lines) | stat: -rw-r--r-- 4,151 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"""Test functionalities of model component modifcations."""

from cobra.core import Model
from cobra.manipulation import escape_ID, rename_genes


def test_escape_ids(model: Model) -> None:
    """Test model component IDs' SBML compliance."""
    model.reactions.PGI.gene_reaction_rule = "a.b or c"
    assert "a.b" in model.genes
    escape_ID(model)
    assert "a.b" not in model.genes


def test_rename_genes(model: Model) -> None:
    """Test gene renaming functionality."""
    original_name = model.genes.b1241.name
    rename_dict = {
        "b1241": "foo",
        "hello": "world",
        "b3115": "b3115",
        "b2465": "b3919",
        "bar": "2935",
    }
    rename_genes(model, rename_dict)
    for i in rename_dict.keys():
        if i not in rename_dict.values():
            assert i not in model.genes

    assert "b3115" in model.genes
    assert "foo" in model.genes
    assert "world" not in model.genes
    # make sure the object name was preserved
    assert model.genes.foo.name == original_name
    # make sure the reactions are correct
    assert len(model.genes.foo.reactions) == 2
    assert model.reactions.ACALD.gene_reaction_rule == "b0351 or foo"
    assert model.reactions.TPI.gene_reaction_rule == "b3919"
    assert model.reactions.TPI.genes == {model.genes.b3919}
    assert model.reactions.TKT1.gene_reaction_rule == "b2935 or b3919"
    assert model.reactions.TKT1.genes == {model.genes.b2935, model.genes.b3919}
    assert model.genes.b3919.reactions == {
        model.reactions.get_by_id(i) for i in ("TKT1", "TKT2", "TPI")
    }


def test_rename_genes_with_context(model: Model) -> None:
    """Test gene renaming functionality is reversed with context."""
    original_name = model.genes.b1241.name
    rename_dict = {
        "b1241": "foo",
        "hello": "world",
        "b3115": "b3115",
        "b2465": "b3919",
        "bar": "2935",
    }
    genes_in_old_model = set()
    print(model.genes.b1241.reactions)
    for i in rename_dict.keys():
        if i not in rename_dict.values() and i in model.genes:
            genes_in_old_model.add(i)
    with model:
        rename_genes(model, rename_dict)
        for i in rename_dict.keys():
            if i not in rename_dict.values():
                assert i not in model.genes

        assert "b3115" in model.genes
        assert "foo" in model.genes
        assert "world" not in model.genes
        # make sure the object name was preserved
        assert model.genes.foo.name == original_name
        # make sure the reactions are correct
        assert len(model.genes.foo.reactions) == 2
        assert model.reactions.ACALD.gene_reaction_rule == "b0351 or foo"
        assert model.reactions.TPI.gene_reaction_rule == "b3919"
        assert model.reactions.TPI.genes == {model.genes.b3919}
        assert model.reactions.TKT1.gene_reaction_rule == "b2935 or b3919"
        assert model.reactions.TKT1.genes == {model.genes.b2935, model.genes.b3919}
        assert model.genes.b3919.reactions == {
            model.reactions.get_by_id(i) for i in ("TKT1", "TKT2", "TPI")
        }
        print(model.genes._dict)
        print(model.genes)
    for i in genes_in_old_model:
        if i not in rename_dict.values():
            assert i in model.genes
    print(model.genes._dict)
    print(model.genes)
    assert "b3115" in model.genes
    assert "foo" not in model.genes
    assert "world" not in model.genes
    # make sure the object name was preserved
    assert model.genes.b1241.name == original_name
    # make sure the reactions are correct
    assert len(model.genes.b1241.reactions) == 2
    assert model.reactions.ACALD.gene_reaction_rule == "b0351 or b1241"
    assert model.reactions.TPI.gene_reaction_rule == "b3919"
    assert model.reactions.TPI.genes == {model.genes.b3919}
    assert model.reactions.TKT1.gene_reaction_rule == "b2935 or b2465"
    assert model.reactions.TKT1.genes == {model.genes.b2935, model.genes.b2465}
    assert model.genes.b2465.reactions == {
        model.reactions.get_by_id(i) for i in ("TKT1", "TKT2")
    }
    assert model.genes.b3919.reactions == {model.reactions.get_by_id("TPI")}