]> mj.ucw.cz Git - moe.git/blob - t/moe/eval.py
Cleaned up exception handling and logging
[moe.git] / t / moe / eval.py
1 #!/usr/bin/env python
2
3 import moe
4 import moe.config
5 import moe.log
6 import moe.meta
7 import moe.pipeline
8 import moe.batch
9 import moe.util
10 import os.path
11 import shutil
12
13 class Eval:
14
15     def __init__(self):
16         self.log = moe.log.default
17         self.cfgs = moe.config.MoeConfigStack()
18         self.builtins = moe.config.MoeConfig(type="builtins")
19         self.cfgs.push(self.builtins)
20         self.main_pipe = moe.pipeline.MoePipeline("main")
21         self.meta = moe.meta.MoeMeta()
22         pass
23
24     def init(self, overrides=None):
25         self.log.progress("Initializing... ")
26         self.init_global(overrides)
27         self.init_test()
28         self.init_logs()
29         self.init_task()
30         self.log.progress("OK\n")
31
32     def init_global(self, overrides):
33         main_cfg = moe.config.MoeConfig(name = os.path.join(self.cfgs['HOME'], "config"), type="main")
34         self.cfgs.push(main_cfg)
35         if overrides:
36             self.cfgs.push(overrides)
37
38     def init_test(self):
39         test = self.cfgs['TEST_DIR']
40         if os.path.isdir(test):
41             shutil.rmtree(test)
42         try:
43             moe.util.mkdir_tree(test)   
44         except OSError, e:
45             raise moe.MoeErr, "Cannot create %s: %s" % (test, e.strerror)
46
47     def init_logs(self):
48         self.log = moe.log.MoeLog()
49         if self.cfgs["V"]:
50             self.log.verbosity = int(self.cfgs["V"])
51         self.log.log_file = open(os.path.join(self.cfgs["TEST_DIR"], "log"), "w")
52         self.default_log = self.log
53         moe.log.default = self.log
54         self.log_config(3, "before loading the task")
55
56     def init_task(self):
57         task = self.cfgs['TASK']
58         task_dir = self.cfgs['TASK_DIR']
59         if not os.path.isdir(task_dir):
60             raise moe.MoeErr, "No such task %s" % task
61
62         task_cfg = moe.config.MoeConfig(name = os.path.join(task_dir, "config"), type='task')
63         self.cfgs.push(task_cfg)
64         self.log_config(3, "after loading the task")
65
66         self.meta["task"] = task
67
68         type = self.cfgs['TASK_TYPE']
69         if type == "batch" or type == "interactive":
70             moe.batch.prepare_pipe(self)
71         elif type == "opendata":
72             raise moe.MoeErr, "Opendata tasks not implemented yet"
73         else:
74             raise moe.MoeErr, "Unknown task type " + type
75
76     def run(self):
77         self.log_config(2, "for the task pipeline")
78         self.main_pipe.configure(self.cfgs["HOOKS"])
79         if self.log.verbosity >= 2:
80             self.main_pipe.dump(self.log.log_file, prefix="\t")
81         self.main_pipe.run(self)
82
83     def log_config(self, verb, msg):
84         if self.log.verbosity >= verb:
85             self.log.say("@@@ Configuration stack %s @@@\n" % msg)
86             self.cfgs.dump_defs(self.log.log_file, prefix="\t")
87         if self.log.verbosity >= 99:
88             self.log.say("@@@@@@ Resolved configuration %s @@@@@@\n" % msg)
89             self.cfgs.dump(self.log.log_file, prefix="\t")