Source code for test_syntax

# -*- coding: utf-8 -*-

# Copyright 2017 Novo Nordisk Foundation Center for Biosustainability,
# Technical University of Denmark.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Syntax tests performed on an instance of ``cobra.Model``."""

from __future__ import absolute_import

import logging

import pytest

import memote.support.syntax as syntax

LOGGER = logging.getLogger(__name__)


@pytest.fixture(scope="module")
[docs]def non_cytosolic(read_only_model, store): """Provide all non-cytosolic compartments.""" compartments = sorted(read_only_model.compartments) try: store["non_cytosolic"] = compartments.remove('c') return compartments except ValueError: LOGGER.error( "The model does not contain a compartment ID labeled 'c' for the " "cytosol which is an essential compartment. Many syntax tests " "depend on this being labeled accordingly.") store["non_cytosolic"] = [] return []
[docs]def test_non_transp_rxn_id_compartment_suffix_match(read_only_model, store, non_cytosolic): """Expect all reactions outside of the cytosol to be tagged accordingly.""" store["reaction_compartment_suffix"] = list() for compartment in non_cytosolic: store["reaction_compartment_suffix"].append([ rxn.id for rxn in syntax.find_rxn_id_compartment_suffix( read_only_model, compartment)]) for compartment, no_match_rxns in zip(non_cytosolic, store["reaction_compartment_suffix"]): assert len(no_match_rxns) == 0, \ "The following reactions in compartment {} are not tagged " \ "correctly: {}".format(compartment, ", ".join(no_match_rxns))
[docs]def test_non_transp_rxn_id_suffix_compartment_match( read_only_model, store, non_cytosolic): """Expect compartment-tagged reactions to involve fitting metabolites.""" store["reaction_metabolite_compartment"] = list() for compartment in non_cytosolic: store["reaction_metabolite_compartment"].append([ rxn.id for rxn in syntax.find_rxn_id_suffix_compartment( read_only_model, compartment)]) for compartment, mislab_rxns in zip( non_cytosolic, store["reaction_metabolite_compartment"]): assert len(mislab_rxns) == 0, \ "The following reactions in compartment {} are tagged to not " \ "contain metabolites from that compartment: {}"\ "".format(compartment, ", ".join(mislab_rxns))
[docs]def test_non_abc_transp_rxn_tag_match(read_only_model, store): """Expect all non-abc transport reactions to be tagged with a ``t``.""" store["untagged_normal_transport"] = [ rxn.id for rxn in syntax.find_reaction_tag_transporter( read_only_model )] assert len(store["untagged_normal_transport"]) == 0, \ "The following non-atp transport reactions are not tagged " \ "correctly: {}".format(", ".join(store["untagged_normal_transport"]))
[docs]def test_abc_transp_rxn_tag_match(read_only_model, store): """Expect all abc transport reactions to be tagged with ``abc``.""" store["untagged_abc_transport"] = [ rxn.id for rxn in syntax.find_abc_tag_transporter(read_only_model)] assert len(store["untagged_abc_transport"]) == 0, \ "The following abc transport reactions are not tagged" \ "correctly: {}".format(", ".join(store["untagged_abc_transport"]))
[docs]def test_upper_case_mets(read_only_model, store): """Expect all metabolites to be lower case with accepted exceptions.""" store["uppercase_metabolites"] = [ met.id for met in syntax.find_upper_case_mets(read_only_model)] assert len(store["uppercase_metabolites"]) == 0, \ "The IDs of the following metabolites are not written in lower case" \ " {}".format(", ".join(store["uppercase_metabolites"]))
[docs]def test_demand_reaction_tag_match(read_only_model, store): """Expect all demand reaction IDs to be prefixed with ``DM_``.""" store["untagged_demand"] = [ rxn.id for rxn in syntax.find_untagged_demand_rxns(read_only_model)] assert len(store["untagged_demand"]) == 0, \ "The IDs of the following demand reactions are not tagged with 'DM_'" \ " {}".format(", ".join(store["untagged_demand"]))
[docs]def test_false_demand_reaction(read_only_model, store): """Expect all rxns that are tagged with ``DM_`` to be true demand rxns.""" store["false_demand"] = [ rxn.id for rxn in syntax.find_false_demand_rxns(read_only_model)] assert len(store["false_demand"]) == 0, \ "The IDs of the following reactions are falsely tagged with 'DM_'" \ " {}".format(", ".join(store["false_demand"]))
[docs]def test_sink_reaction_tag_match(read_only_model, store): """Expect all sink reaction IDs to be prefixed with ``SK_``.""" store["untagged_sink"] = [ rxn.id for rxn in syntax.find_untagged_sink_rxns(read_only_model)] assert len(store["untagged_sink"]) == 0, \ "The IDs of the following sink reactions are not tagged with 'SK_'" \ " {}".format(", ".join(store["untagged_demand"]))
[docs]def test_false_sink_reaction(read_only_model, store): """Expect all rxns that are tagged with ``SK_`` to be true sink rxns.""" store["false_sink"] = [ rxn.id for rxn in syntax.find_false_sink_rxns(read_only_model)] assert len(store["false_sink"]) == 0, \ "The IDs of the following reactions are falsely tagged with 'SK_'" \ " {}".format(", ".join(store["false_sink"]))
[docs]def test_exchange_reaction_tag_match(read_only_model, store): """Expect all exchange reaction IDs to be prefixed with ``EX_``.""" store["untagged_exchange"] = [ rxn.id for rxn in syntax.find_untagged_exchange_rxns(read_only_model)] assert len(store["untagged_exchange"]) == 0, \ "The IDs of the following demand reactions are not tagged with 'EX_'" \ " {}".format(", ".join(store["untagged_exchange"]))
[docs]def test_false_exchange_reaction(read_only_model, store): """Expect all rxns that are tagged with ``EX_`` to be true exchange rxns.""" store["false_exchange"] = [ rxn.id for rxn in syntax.find_false_exchange_rxns(read_only_model)] assert len(store["false_exchange"]) == 0, \ "The IDs of the following reactions are falsely tagged with 'EX_'" \ " {}".format(", ".join(store["false_exchange"]))