Source code for memote.support.sbo

# -*- 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.

"""Supporting functions for sbo checks performed on the model object."""

from __future__ import absolute_import

import logging


[docs]LOGGER = logging.getLogger(__name__)
[docs]def find_components_without_sbo_terms(model, components): """ Find model components that are not annotated with any SBO terms. Parameters ---------- model : cobra.Model The metabolic model under investigation. components : {"metabolites", "reactions", "genes"} A string denoting `cobra.Model` components. Returns ------- list The components without any SBO term annotation. """ return [ elem for elem in getattr(model, components) if elem.annotation is None or "sbo" not in elem.annotation
]
[docs]def check_component_for_specific_sbo_term(items, term): r""" Identify model components that lack a specific SBO term(s). Parameters ---------- items : list A list of model components i.e. reactions to be checked for a specific SBO term. term : str or list of str A string denoting a valid SBO term matching the regex '^SBO:\d{7}$' or a list containing such string elements. Returns ------- list The components without any or that specific SBO term annotation. """ # check for multiple allowable SBO terms if isinstance(term, list): return [ elem for elem in items if elem.annotation is None or "sbo" not in elem.annotation or not any(i in elem.annotation["sbo"] for i in term) ] else: return [ elem for elem in items if elem.annotation is None or "sbo" not in elem.annotation or term not in elem.annotation["sbo"]
]