Files
mlpack/fastlib/trunk/script/fx.py
T

101 lines
2.2 KiB
Python

"""
FastExec client library very similar to the C library.
This provides command-line argument parsing in FASTexec style, and also provides
a global datastore for exporting metrics (and dumping them to a file if
desired).
"""
import datastore
import sys
"""The root datanode for the fx system."""
datanode = datastore.DataNode()
"""Extra command-line arguments that do not contain --."""
extra_args = []
def param(name, mustexist = True):
v = datanode.get_val_path("/info/params/" + name.strip("/"))
if mustexist and v == None:
raise "Parameter [%s] not specified." % (name)
return v
def param_exists(name):
return param(name, False) != None
def param_default(name, val):
if not param_exists(name):
datanode.set_val_path("/info/params/" + name.strip("/"), val)
def param_str(name):
# TODO: Validate?
return param(name)
def param_int(name):
# TODO: Validate?
return int(param(name))
def param_float(name):
return float(param(name))
def param_bool(name):
str = param(name, False)
if str == None or (len(str) > 0 and str[0] in "fFnN0"):
return False
else:
return True
def dump():
stream = sys.stdout
fname = param("fx/output")
if fname != None:
stream = open(fname, "w")
try:
datanode.write_pathstyle(stream)
finally:
if fname != None:
stream.close()
# TODO: Configurable
# TODO: FINISH THIS
def metric_set(instancename, name, val):
if instancename == None:
path = ["info", "metrics", name]
else:
path = ["instances", instancename, "metrics", name]
datanode.set_val(path, val)
def subparam_set(instancename, name, val):
path = ["instances", instancename, "params", name]
datanode.set_val(path, val)
def __parse_args():
"""Parses command-line arguments.
Note that the keys are in path-style and unescaped as so.
However, the values are assumed not to be escaped.
"""
global extra_args
kvpairs = []
for arg in sys.argv[1:]:
if arg[0:2] == "--":
if '=' in arg:
i = arg.index("=")
kvpairs.append((arg[2:i], arg[i+1:]))
else:
kvpairs.append((arg[2:], "1"))
else:
extra_args.append(arg)
for (name, val) in kvpairs:
param_default(name, val)
__parse_args()
if __name__ == "__main__":
print datanode
print extra_args