]> mj.ucw.cz Git - moe.git/blob - t/moe/eval.py
9c9f5acf43e320ad04a6812d4209888baa8a5a7c
[moe.git] / t / moe / eval.py
1 #!/usr/bin/env python
2
3 import moe.config
4 import moe.log
5 import moe.meta
6 import moe.pipeline
7 import moe.batch
8 import moe.util
9 import os.path
10 import shutil
11
12 class MoeEvalErr(Exception):
13     pass
14
15 class Eval:
16
17     def __init__(self):
18         self.cfgs = moe.config.MoeConfigStack()
19         self.builtins = moe.config.MoeConfig()
20         self.cfgs.push(self.builtins)
21         self.main_pipe = moe.pipeline.MoePipeline("main")
22         self.meta = moe.meta.MoeMeta()
23         pass
24
25     def init(self, overrides=None):
26         self.init_global(overrides)
27         self.init_test()
28         ## FIXME: Initialize logging early on
29         self.init_task()
30
31     def init_global(self, overrides):
32         main_cfg = moe.config.MoeConfig(name = os.path.join(self.cfgs['HOME'], "config"))
33         self.cfgs.push(main_cfg)
34         if overrides:
35             self.cfgs.push(overrides)
36
37     def init_test(self):
38         test = self.cfgs['TEST_DIR']
39         if os.path.isdir(test):
40             shutil.rmtree(test)
41         try:
42             moe.util.mkdir_tree(test)   
43         except OSError, e:
44             raise MoeEvalErr, "Cannot create %s: %s" % (test, e.strerror)
45
46     def init_task(self):
47         task = self.cfgs['TASK']
48         task_dir = self.cfgs['TASK_DIR']
49         if not os.path.isdir(task_dir):
50             raise MoeEvalErr, "No such task %s" % task
51         task_cfg = moe.config.MoeConfig(name = os.path.join(task_dir, "config"))
52         self.cfgs.push(task_cfg)
53         self.meta["task"] = task
54
55         type = self.cfgs['TASK_TYPE']
56         if type == "batch" or type == "interactive":
57             moe.batch.prepare_pipe(self)
58         elif type == "opendata":
59             raise MoeEvalErr, "Opendata tasks not implemented yet"
60         else:
61             raise MoeEvalErr, "Unknown task type " + type
62
63     def run(self):
64         self.main_pipe.configure(self.cfgs["HOOKS"])
65         self.main_pipe.dump()
66         self.main_pipe.run(self)