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