def testUptodateProd(self): "check that a rule is not run for a current production" er = ExRun(verbFlags=verbFlags) prod = CurrentProd("neverRunProd") er.addProd(prod) rule = NeverRunRule("neverRunRule", produces=prod) er.obtainDefaultTarget(prod) er.addRule(rule) er.run() self.checkGraphStates(er)
class ExprBuilder(object): """Build artificial experiments. The graph is defined by a list of rule definition objects. Productions are defined by lists of names. There is no other definition of the productions. """ def __init__(self, ruleDefs, verbFlags=None, keepGoing=False): self.er = ExRun(verbFlags=verbFlags, keepGoing=keepGoing) self.graph = self.er.graph for rdef in ruleDefs: self.__addRuleDef(rdef) # set times leaf productions for p in self.graph.productions: if p.producedBy == None: p.time = time.time() def __addRuleDef(self, rdef): if rdef.name in self.graph.rulesByName: raise Exception("duplicate rule def: " + rdef.name) rule = self.er.addRule(MemRule(rdef.name)) for pName in rdef.produces: self.__addProduces(rule, pName) for rName in rdef.requires: self.__addRequires(rule, rName) def __addProduces(self, rule, pName): prod = self.__obtainProd(pName) if prod.producedBy != None: raise Exception("duplicate production def: " + pName) rule.linkProduces(prod) def __addRequires(self, rule, rName): prod = self.__obtainProd(rName) rule.linkRequires(prod) def __obtainProd(self, pName): prod = self.graph.productionsByName.get(pName) if prod == None: prod = self.er.addProd(MemProd(pName)) return prod