def constantFactory(constants, pset):
for const_block in constants:
if(not const_block.has_key("type")):
raise ValueError("Constant block in configuration missing type key.\n %s" % str(const_block));
typename = const_block["type"].lower()
if typename == "randint":
if(not const_block.has_key("min") or not const_block.has_key("max")):
raise ValueError("Constant randint in configuration must have min and max values.\n %s" % str(const_block));
minn = int(const_block["min"])
maxx = int(const_block["max"])
pset.addEphemeralConstant("randint%d.%d" %(minn, maxx), lambda: random.randint(minn,maxx))
elif typename == "uniform":
if(not const_block.has_key("min") or not const_block.has_key("max")):
raise ValueError("Constant uniform in configuration must have min and max values.\n %s" % str(const_block));
minn = int(const_block["min"])
maxx = int(const_block["max"])
pset.addEphemeralConstant("uniform%d.%d" %(minn, maxx), lambda: random.uniform(minn,maxx))
elif typename == "normal":
if(not const_block.has_key("mu") or not const_block.has_key("sigma")):
raise ValueError("Constant normal in configuration must have mu and sigma values.\n %s" % str(const_block));
mu = int(const_block["mu"])
sigma = int(const_block["sigma"])
pset.addEphemeralConstant("normal%d.%d" %(mu, sigma), lambda: random.normalvariate(mu,sigma))
elif typename == "gamma":
if(not const_block.has_key("alpha") or not const_block.has_key("beta")):
raise ValueError("Constant gamma in configuration must have alpha and beta values.\n %s" % str(const_block));
alpha = int(const_block["alpha"])
beta = int(const_block["beta"])
pset.addEphemeralConstant("normal%d.%d" %(alpha, beta), lambda: random.gammavariate(alpha,beta))
elif typename == "constant":
if(not const_block.has_key("value")):
raise ValueError("Constant constant in configuration must have value.\n %s" % str(const_block));
value = int(const_block["value"])
pset.addEphemeralConstant("const%d" %(value), lambda: value)
else:
raise ValueError("Unknown constant type %s\n" % typename)
评论列表
文章目录