]> mj.ucw.cz Git - eval.git/blob - t/moe/eval.py
Logging
[eval.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.log = moe.log.default
19         self.cfgs = moe.config.MoeConfigStack()
20         self.builtins = moe.config.MoeConfig(type="builtins")
21         self.cfgs.push(self.builtins)
22         self.main_pipe = moe.pipeline.MoePipeline("main")
23         self.meta = moe.meta.MoeMeta()
24         pass
25
26     def init(self, overrides=None):
27         self.init_global(overrides)
28         self.init_test()
29         self.init_logs()
30         self.init_task()
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 MoeEvalErr, "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         self.log_config(3, "before loading the task")
54
55     def init_task(self):
56         task = self.cfgs['TASK']
57         task_dir = self.cfgs['TASK_DIR']
58         if not os.path.isdir(task_dir):
59             raise MoeEvalErr, "No such task %s" % task
60
61         task_cfg = moe.config.MoeConfig(name = os.path.join(task_dir, "config"), type='task')
62         self.cfgs.push(task_cfg)
63         self.log_config(3, "after loading the task")
64
65         self.meta["task"] = task
66
67         type = self.cfgs['TASK_TYPE']
68         if type == "batch" or type == "interactive":
69             moe.batch.prepare_pipe(self)
70         elif type == "opendata":
71             raise MoeEvalErr, "Opendata tasks not implemented yet"
72         else:
73             raise MoeEvalErr, "Unknown task type " + type
74
75     def run(self):
76         self.log_config(2, "for the task pipeline")
77         self.main_pipe.configure(self.cfgs["HOOKS"])
78         self.main_pipe.dump()
79         self.main_pipe.run(self)
80
81     def log_config(self, verb, msg):
82         if self.log.verbosity >= verb:
83             self.log.say("@@@ Configuration stack %s @@@\n" % msg)
84             self.cfgs.dump_defs(self.log.log_file, prefix="\t")
85         if self.log.verbosity >= 99:
86             self.log.say("@@@@@@ Resolved configuration %s @@@@@@\n" % msg)
87             self.cfgs.dump(self.log.log_file, prefix="\t")