def get_nextcase(self): # construct directives NNcases = [] while len(self.casenums) < State.cases['size']: casenum, casenumseq, directs, objs = get_directs( self.selectfunc, self.prefunc, self.postfunc) predict = None if casenum in self.casenums or casenum in NNcases: continue elif len(self.casenums) < self.NN_min_dataset_size or len( self.ranking) == 0: break else: NNcases.append((casenum, casenumseq, directs, objs)) if len(NNcases) < self.NN_basket_size: continue casenum, casenumseq, directs, objs, predict = self.NN_get_nextcase( NNcases) break if casenum in self.casenums: continue break self.casenums.append(casenum) return Case(self, casenum=casenum, caseorder=len(self.casenums), directs=directs, caseidxseq=casenumseq, objs=objs, predict=predict)
def __init__(self): self.refcase = None self.ranking = [] # (casenum, caseorder, performance ) self.failed = [] # (casenum, caseorder, performance ) self.casenums = [] # configure for case generation if State.direct.has_key('casegen'): if len(State.direct['casegen'])!=1: raise UserException('Only one CASEGEN directive is allowed') sub = State.direct['casegen'][0][0] # (sub, stmt, span) subsub = sub.cases[0][0][0] item = SrcFile.applymap(subsub.case[0][0][0]) attrs = SrcFile.applymap(subsub.case[0][1]) if item=='rand': self.selectfunc, self.prefunc, self.postfunc, self.updatefunc = casegen_functions_random elif item=='dtree': self.selectfunc, self.prefunc, self.postfunc, self.updatefunc = casegen_functions_dtree else: raise UserException('%s is not valid cage generation algorithm'%item) else: self.selectfunc, self.prefunc, self.postfunc, self.updatefunc = casegen_functions_random # configure for measurment self.measure = {} for sub, stmt, span in State.direct['measure']: for subsub in sub.cases[0][0]: item = SrcFile.applymap(subsub.case[0][0][0]) attrs = SrcFile.applymap(subsub.case[0][1]) self.measure[item] = attrs # configure for verification self.verify = {} for sub, stmt, span in State.direct['verify']: for subsub in sub.cases[0][0]: item = SrcFile.applymap(subsub.case[0][0][0]) attrs = SrcFile.applymap(subsub.case[0][1]) self.verify[item] = attrs self.rank_var = State.direct['rank'][0][0].cases[0][0][0].case[0][0][0] self.rank_attrs = State.direct['rank'][0][0].cases[0][0][0].case[0][1] # build Neural Network casenum, casenumseq, directs, objs = get_directs( self.selectfunc, self.prefunc, self.postfunc) self.casesizes = [] for caseidx, caseobj in casenumseq: self.casesizes.append(max(1, int(math.ceil(math.log(caseobj.size, 2))))) self.NN_input_size = sum(self.casesizes) self.NN_hidden_layers = 4 self.NN_target_size = 1 self.NN_net = buildNetwork( self.NN_input_size, self.NN_hidden_layers, self.NN_target_size, bias = True ) self.NN_trainer = BackpropTrainer(self.NN_net, momentum=0.1, weightdecay=0.01, learningrate=0.01) self.NN_ds = SupervisedDataSet( self.NN_input_size, self.NN_target_size ) self.NN_basket_size = 1000 self.NN_min_dataset_size = min(20, State.cases['size']) self.NN_amp_factor = 1.0
def get_nextcase(self): # construct directives NNcases = [] while len(self.casenums)<State.cases['size']: casenum, casenumseq, directs, objs = get_directs( self.selectfunc, self.prefunc, self.postfunc) predict = None if casenum in self.casenums or casenum in NNcases: continue elif len(self.casenums)<self.NN_min_dataset_size or len(self.ranking)==0: break else: NNcases.append((casenum, casenumseq, directs, objs)) if len(NNcases)<self.NN_basket_size: continue casenum, casenumseq, directs, objs, predict = self.NN_get_nextcase(NNcases) break if casenum in self.casenums: continue break self.casenums.append(casenum) return Case( self, casenum=casenum, caseorder=len(self.casenums), directs=directs, caseidxseq=casenumseq, objs=objs, predict=predict )
def __init__(self): self.refcase = None self.ranking = [] # (casenum, caseorder, performance ) self.failed = [] # (casenum, caseorder, performance ) self.casenums = [] # configure for case generation if State.direct.has_key('casegen'): if len(State.direct['casegen']) != 1: raise UserException('Only one CASEGEN directive is allowed') sub = State.direct['casegen'][0][0] # (sub, stmt, span) subsub = sub.cases[0][0][0] item = SrcFile.applymap(subsub.case[0][0][0]) attrs = SrcFile.applymap(subsub.case[0][1]) if item == 'rand': self.selectfunc, self.prefunc, self.postfunc, self.updatefunc = casegen_functions_random elif item == 'dtree': self.selectfunc, self.prefunc, self.postfunc, self.updatefunc = casegen_functions_dtree else: raise UserException( '%s is not valid cage generation algorithm' % item) else: self.selectfunc, self.prefunc, self.postfunc, self.updatefunc = casegen_functions_random # configure for measurment self.measure = {} for sub, stmt, span in State.direct['measure']: for subsub in sub.cases[0][0]: item = SrcFile.applymap(subsub.case[0][0][0]) attrs = SrcFile.applymap(subsub.case[0][1]) self.measure[item] = attrs # configure for verification self.verify = {} for sub, stmt, span in State.direct['verify']: for subsub in sub.cases[0][0]: item = SrcFile.applymap(subsub.case[0][0][0]) attrs = SrcFile.applymap(subsub.case[0][1]) self.verify[item] = attrs self.rank_var = State.direct['rank'][0][0].cases[0][0][0].case[0][0][0] self.rank_attrs = State.direct['rank'][0][0].cases[0][0][0].case[0][1] # build Neural Network casenum, casenumseq, directs, objs = get_directs( self.selectfunc, self.prefunc, self.postfunc) self.casesizes = [] for caseidx, caseobj in casenumseq: self.casesizes.append( max(1, int(math.ceil(math.log(caseobj.size, 2))))) self.NN_input_size = sum(self.casesizes) self.NN_hidden_layers = 4 self.NN_target_size = 1 self.NN_net = buildNetwork(self.NN_input_size, self.NN_hidden_layers, self.NN_target_size, bias=True) self.NN_trainer = BackpropTrainer(self.NN_net, momentum=0.1, weightdecay=0.01, learningrate=0.01) self.NN_ds = SupervisedDataSet(self.NN_input_size, self.NN_target_size) self.NN_basket_size = 1000 self.NN_min_dataset_size = min(20, State.cases['size']) self.NN_amp_factor = 1.0