wc_kb_gen/random/core.py
""" 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