KarrLab/wc_kb_gen

View on GitHub
wc_kb_gen/random/core.py

Summary

Maintainability
A
25 mins
Test Coverage
A
100%
""" Generator for KBs for random in silico organisms

:Author: Jonathan Karr <karr@mssm.edu>
:Date: 2018-06-11
:Copyright: 2018, Karr Lab
:License: MIT
"""

from .genome import GenomeGenerator
from .metabolites import MetabolitesGenerator
from .properties import PropertiesGenerator
from .compartments import CompartmentsGenerator
from .observables import ObservablesGenerator
from .complex import ComplexGenerator
from numpy import random
import wc_kb_gen


class RandomKbGenerator(wc_kb_gen.KbGenerator):
    """ Generator for KBs for random in silico organisms

    * Circular chromosome

    Options:

    * id
    * version
    * component

        * GenomeGenerator
        * MetabolitesGenerator
        * PropertiesGenerator
    """

    DEFAULT_COMPONENT_GENERATORS = (
        PropertiesGenerator,
        CompartmentsGenerator,
        GenomeGenerator,
        MetabolitesGenerator,
        ComplexGenerator,
        ObservablesGenerator,
    )

    def run(self):
        """ Generate a knowledge base of experimental data for a whole-cell model

        Returns:
            :obj:`wc_kb.KnowledgeBase`: knowledge base
        """
        self.clean_and_validate_options()
        random.seed(self.options.get('seed'))
        return super(RandomKbGenerator, self).run()

    def clean_and_validate_options(self):
        """ Apply default options and validate options """
        options = self.options

        id = options.get('id', 'rand_wc_model')
        assert(isinstance(id, str) or id is None)
        options['id'] = id

        name = options.get('name', 'Random whole-cell model')
        assert(isinstance(name, str) or name is None)
        options['name'] = name

        version = options.get('version', wc_kb_gen.__version__)
        assert(isinstance(version, str) or version is None)
        options['version'] = version

        seed = options.get('seed', None)
        if seed is not None:
            try:
                int(seed)
            except ValueError:
                raise ValueError(
                    '`seed` option must be convertible to a 32 bit unsigned integer or `None`')
        options['seed'] = seed