Source code for VirtualMicrobes.simulation.continue

#! /usr/bin/env python
# encoding: utf-8


import sys
import os

from argparse import ArgumentParser
from argparse import RawDescriptionHelpFormatter
import itertools

[docs]def parse_opts(opt_strings): opt_sets = [] for opt in opt_strings: opt_set = [] try: opt, vals = opt.split(':') vals = vals.split(';') for val in vals: delims = val.split('-') if len(delims) == 2: for v in range(*map(int,delims)): opt_set.append((opt,str(v))) else: opt_set.append((opt,val)) except ValueError: opt_set.append( (opt,'')) opt_set.append( ('','')) opt_sets.append( opt_set) return opt_sets
[docs]def to_argparse_opts(opts): def parse_opt(opt_string): opt,val = opt_string if len(opt) == 0: return '' if len(opt) == 1: return '-' + opt + ' ' + val return '--' + opt + ' ' + val return ' '.join([ parse_opt(opt) for opt in opts ])
[docs]def main(argv=None): # IGNORE:C0111 if argv is None: argv = sys.argv else: sys.argv.extend(argv) # Setup argument parser desc = ('Start a batch of runs. ' ' Lets you define sets or ranges of parameters for which to run evolutionary simulations.' ' All combinations of parameters will be initialized' ) parser = ArgumentParser(description=desc, formatter_class=RawDescriptionHelpFormatter) parser.add_argument('-l', '--load-files' , nargs='+', help='simulation saves to be reloaded and continued' ) parser.add_argument('-e', '--evo-config' , help='full path to evolutionary configuration file (should start with evo option' ) parser.add_argument('-g', '--gen-config' , help='full path to generation configuration file.' ) parser.add_argument('-n', '--name', default='continue', help='simulation identification name' ) parser.add_argument('-a', '--gen-opts', type=str, nargs='*', default=[], help=('A list of general simulation options [with parameter values (ranges)]. Specify as ' ' option-name:val1;val2;val3 OR option-name:start-end OR option-name ' ' (without values). e.g. : -a base-death-rate:0.1;0.3;0.5 perfect-mix non:1-3. ' ' NOTE: ranges should be integer ranges; they are [start-end) ' ) ) parser.add_argument('-z', '--evo-opts', type=str, nargs='*', default=[], help='A list of evolutionary simulation options (see --gen-opts for details)' ) parser.add_argument('--cores', default=4) # Process arguments args = parser.parse_args() print 'args parsed', args gen_opt_sets = parse_opts(args.gen_opts) gen_opt_combis = itertools.product(*gen_opt_sets) if len(gen_opt_sets) else [()] evo_opt_sets = parse_opts(args.evo_opts) evo_opt_combis = itertools.product(*evo_opt_sets) if len(evo_opt_sets) else [()] sys_commands = ['screen -d -L -t {screen_name} -S {screen_name} -m', "xvfb-run --auto-servernum --server-args='-screen 0 1024x768x24'", 'vermicelli.py', '-n {cores}'] run_name=args.name for lf in args.load_files: for gen_opts, evo_opts in itertools.product(gen_opt_combis, evo_opt_combis): opt_strings = [] opt_strings.append('--proctitle vm-{}'.format(run_name)) name = run_name opts_suf = '-'.join([ opt[:3]+val for (opt,val) in gen_opts + evo_opts ]) if opts_suf != '': name += '_'+ opts_suf if args.gen_config: opt_strings.append( '@' + args.gen_config) opt_strings.append(to_argparse_opts(gen_opts)) if args.evo_config: opt_strings.append( '@' + args.evo_config) else: opt_strings.append('- evo') opt_strings.append(to_argparse_opts(evo_opts)) opt_strings.append('--name {}'.format(name)) opt_strings.append("--load-file '{}'".format(lf)) screen_name = '-'.join([name, lf.split('/')[0]]) command = ' '.join(sys_commands+opt_strings).format(screen_name=screen_name,cores=args.cores) print command os.system(command) return 0
if __name__ == "__main__": sys.exit(main())