diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-07 11:21:23 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-07 11:21:23 -0500 |
commit | 39020cf5ae3030bc15035925a0c72eb44eea67b7 (patch) | |
tree | fb82b339c1e5c14334f8d9839f8d836b120fbb08 /gen_exps.py | |
parent | d524da9bd072ad1be4ac0d633e3e783094ddc2d7 (diff) |
Added gen_exps.py script.
Diffstat (limited to 'gen_exps.py')
-rwxr-xr-x[-rw-r--r--] | gen_exps.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/gen_exps.py b/gen_exps.py index e69de29..e4e8187 100644..100755 --- a/gen_exps.py +++ b/gen_exps.py | |||
@@ -0,0 +1,98 @@ | |||
1 | #!/usr/bin/env python | ||
2 | from __future__ import print_function | ||
3 | |||
4 | import os | ||
5 | import re | ||
6 | import shutil as sh | ||
7 | |||
8 | from gen.generators import GedfGenerator,PedfGenerator,CedfGenerator | ||
9 | from optparse import OptionParser | ||
10 | |||
11 | # There has to be a better way to do this... | ||
12 | GENERATORS = {'C-EDF':CedfGenerator, | ||
13 | 'P-EDF':PedfGenerator, | ||
14 | 'G-EDF':GedfGenerator} | ||
15 | |||
16 | def parse_args(): | ||
17 | parser = OptionParser("usage: %prog [options] [files...] " | ||
18 | "[generators...] [param=val[,val]...]") | ||
19 | |||
20 | parser.add_option('-o', '--out-dir', dest='out_dir', | ||
21 | help='directory for data output', | ||
22 | default=("%s/exps"%os.getcwd())) | ||
23 | parser.add_option('-f', '--force', action='store_true', default=False, | ||
24 | dest='force', help='overwrite existing data') | ||
25 | parser.add_option('-l', '--list-generators', dest='list_gens', | ||
26 | help='list allowed generators', action='store_true', | ||
27 | default=False) | ||
28 | parser.add_option('-d', '--describe-generators', metavar='generator[,..]', | ||
29 | dest='described', default=None, | ||
30 | help='describe parameters for generator(s)') | ||
31 | |||
32 | return parser.parse_args() | ||
33 | |||
34 | def load_file(fname): | ||
35 | with open(fname, 'r') as f: | ||
36 | data = f.read().strip() | ||
37 | try: | ||
38 | values = eval(data) | ||
39 | if 'generator' not in values: | ||
40 | raise ValueError() | ||
41 | generator = values['generator'] | ||
42 | del values['generator'] | ||
43 | return generator, values | ||
44 | except: | ||
45 | raise IOError("Invalid generation file: %s" % fname) | ||
46 | |||
47 | def main(): | ||
48 | opts, args = parse_args() | ||
49 | |||
50 | # Print generator information on the command line | ||
51 | if opts.list_gens: | ||
52 | print(", ".join(GENERATORS.keys())) | ||
53 | if opts.described != None: | ||
54 | for generator in opts.described.split(','): | ||
55 | if generator not in GENERATORS: | ||
56 | print("No generator '%s'" % generator) | ||
57 | else: | ||
58 | GENERATORS[generator]().print_help() | ||
59 | if opts.list_gens or opts.described: | ||
60 | return 0 | ||
61 | |||
62 | params = filter(lambda x : re.match("\w+=\w+", x), args) | ||
63 | |||
64 | # Ensure some generator is loaded | ||
65 | args = list(set(args) - set(params)) | ||
66 | #TODO: get every loaded plugin, try and use that generator | ||
67 | args = args or ['C-EDF', 'G-EDF', 'P-EDF'] | ||
68 | |||
69 | # Split into files to load, named generators | ||
70 | files = filter(os.path.exists, args) | ||
71 | gen_list = list(set(args) - set(files)) | ||
72 | |||
73 | # Parse all specified parameters to be applied to every experiment | ||
74 | global_params = dict(map(lambda x : tuple(x.split("=")), params)) | ||
75 | for k, v in global_params.iteritems(): | ||
76 | global_params[k] = v.split(',') | ||
77 | |||
78 | exp_sets = map(load_file, files) | ||
79 | exp_sets += map(lambda x: (x, {}), gen_list) | ||
80 | |||
81 | if opts.force and os.path.exists(opts.out_dir): | ||
82 | sh.rmtree(opts.out_dir) | ||
83 | if not os.path.exists(opts.out_dir): | ||
84 | os.mkdir(opts.out_dir) | ||
85 | |||
86 | for gen_name, gen_params in exp_sets: | ||
87 | if gen_name not in GENERATORS: | ||
88 | raise ValueError("Invalid generator name: %s" % gen_name) | ||
89 | |||
90 | print("Creating experiments using %s generator..." % gen_name) | ||
91 | |||
92 | params = dict(gen_params.items() + global_params.items()) | ||
93 | generator = GENERATORS[gen_name](params) | ||
94 | |||
95 | generator.create_exps(opts.out_dir, opts.force) | ||
96 | |||
97 | if __name__ == '__main__': | ||
98 | main() | ||