# No initialization needed
+
+class MoeErr(Exception):
+ pass
+
+class SolutionErr(Exception):
+ pass
#!/usr/bin/env python
import os.path
+import moe
import moe.eval
import moe.util
for e in e.cfgs["EXTENSIONS"].split():
if e == ext:
return
- raise moe.eval.MoeEvalErr, "Unknown extension: " + ext
+ raise moe.MoeErr, "Unknown extension: " + ext
def locate(e, filename=None):
+ e.log.progress("Locating source... ")
task = e.cfgs["TASK"]
if filename is None:
dir = ""
base, ext = os.path.splitext(file)
if ext != "":
if not os.path.exists(os.path.join(dir, file)):
- raise moe.eval.MoeEvalErr, "No solution of %s called %s found" % (task,file)
+ raise moe.SolutionErr, "No solution of %s called %s found" % (task,file)
ext = ext[1:]
try_ext(e, ext)
else:
if os.path.exists(os.path.join(dir, base + "." + ext)):
found.append(ext)
if len(found) == 0:
- raise moe.eval.MoeEvalErr, "No solution of %s found" % task
+ raise moe.SolutionErr, "No solution of %s found" % task
if len(found) > 1:
- raise moe.eval.MoeEvalErr, "Multiple solutions of %s found" % task
+ raise moe.SolutionErr, "Multiple solutions of %s found" % task
ext = found[0]
file = base + "." + ext
e.builtins.set("EXT", norm_ext)
e.cfgs.apply_overrides("EXT_" + norm_ext)
- e.meta["source"] = copy
+ e.meta["source"] = file
+ e.log.progress(file + "\n")
def compile(e):
pass
import re
import sys
+import moe
key_pattern = re.compile("^[A-Za-z0-9_-]+$")
ref_pattern = re.compile("^[A-Za-z0-9_-]+")
-class MoeConfigInvalid(Exception):
+class MoeConfigInvalid(moe.MoeErr):
pass
-class MoeConfigEvalErr(Exception):
+class MoeConfigEvalErr(moe.MoeErr):
pass
class MoeConfig:
#!/usr/bin/env python
+import moe
import moe.config
import moe.log
import moe.meta
import os.path
import shutil
-class MoeEvalErr(Exception):
- pass
-
class Eval:
def __init__(self):
pass
def init(self, overrides=None):
+ self.log.progress("Initializing... ")
self.init_global(overrides)
self.init_test()
self.init_logs()
self.init_task()
+ self.log.progress("OK\n")
def init_global(self, overrides):
main_cfg = moe.config.MoeConfig(name = os.path.join(self.cfgs['HOME'], "config"), type="main")
try:
moe.util.mkdir_tree(test)
except OSError, e:
- raise MoeEvalErr, "Cannot create %s: %s" % (test, e.strerror)
+ raise moe.MoeErr, "Cannot create %s: %s" % (test, e.strerror)
def init_logs(self):
self.log = moe.log.MoeLog()
self.log.verbosity = int(self.cfgs["V"])
self.log.log_file = open(os.path.join(self.cfgs["TEST_DIR"], "log"), "w")
self.default_log = self.log
+ moe.log.default = self.log
self.log_config(3, "before loading the task")
def init_task(self):
task = self.cfgs['TASK']
task_dir = self.cfgs['TASK_DIR']
if not os.path.isdir(task_dir):
- raise MoeEvalErr, "No such task %s" % task
+ raise moe.MoeErr, "No such task %s" % task
task_cfg = moe.config.MoeConfig(name = os.path.join(task_dir, "config"), type='task')
self.cfgs.push(task_cfg)
if type == "batch" or type == "interactive":
moe.batch.prepare_pipe(self)
elif type == "opendata":
- raise MoeEvalErr, "Opendata tasks not implemented yet"
+ raise moe.MoeErr, "Opendata tasks not implemented yet"
else:
- raise MoeEvalErr, "Unknown task type " + type
+ raise moe.MoeErr, "Unknown task type " + type
def run(self):
self.log_config(2, "for the task pipeline")
self.main_pipe.configure(self.cfgs["HOOKS"])
- self.main_pipe.dump()
+ if self.log.verbosity >= 2:
+ self.main_pipe.dump(self.log.log_file, prefix="\t")
self.main_pipe.run(self)
def log_config(self, verb, msg):
self.log_file.write(msg)
def progress(self, msg):
- if self.progress:
- self.progress.write(msg)
+ if self.progress_file:
+ self.progress_file.write(msg)
+
+ def shout(self, msg):
+ self.say(msg)
+ self.progress(msg)
default = MoeLog()
import sys
import bisect
import imp
+import moe
import moe.log
-class MoePipeError(Exception):
+class MoePipeError(moe.MoeErr):
"""Failure of the MoePipeline."""
class MoePipeline:
raise MoePipeError, "Pipeline insert cannot alter the past"
self.pipe.insert(pos, triple)
- def dump(self, file=sys.stdout):
+ def dump(self, file=sys.stdout, prefix=""):
file.write(">>> Pipeline %s\n" % self.name)
for pri,name,fun in self.pipe:
- file.write("%03d %s\n" % (pri,name))
+ file.write("%s%03d %s\n" % (prefix,pri,name))
def run(self, *args):
self.index = 0
import sys
sys.path.append('.')
+import moe
import moe.meta
import moe.config
import moe.eval
import moe.pipeline
import moe.batch
-overrides = moe.config.parse_overrides(sys.argv)
-
e = moe.eval.Eval()
-e.builtins.set("HOME", ".")
-e.builtins.set("TASK", "sum")
-e.builtins.set("CONTESTANT", "mj")
-e.init(overrides)
-if len(sys.argv) > 1:
- file = sys.argv[1]
-else:
- file = None
-moe.batch.locate(e, file)
+try:
+ overrides = moe.config.parse_overrides(sys.argv)
+ e.builtins.set("HOME", ".")
+ e.builtins.set("TASK", "sum")
+ e.builtins.set("CONTESTANT", "mj")
+ e.log.progress("### Evaluating task %s of contestant %s ###\n\n" % (e.cfgs['TASK'], e.cfgs['CONTESTANT']))
+ e.init(overrides)
+except moe.MoeErr, err:
+ e.log.shout("FATAL: %s\n" % err)
+ sys.exit(1)
-e.run()
+try:
+ if len(sys.argv) > 1:
+ file = sys.argv[1]
+ else:
+ file = None
+ moe.batch.locate(e, file)
+ e.run()
+except moe.MoeErr, err:
+ e.log.shout("FATAL: %s\n" % err)
+ sys.exit(1)
+except moe.SolutionErr, err:
+ ## FIXME: In this case, we might write the meta file
+ e.log.shout("%s\n" % err)
+ sys.exit(1)
print "\nFinal meta file:"
e.meta.write()