def sampleIndex(self,trace): if self.block == "one": return constructScaffold(trace,[trace.getNodesInBlock(self.scope,trace.sampleBlock(self.scope))]) elif self.block == "all": return constructScaffold(trace,[trace.getAllNodesInScope(self.scope)]) elif self.block == "ordered": return constructScaffold(trace,trace.getOrderedSetsInScope(self.scope)) elif self.block == "ordered_range": assert self.interval return constructScaffold(trace,trace.getOrderedSetsInScope(self.scope),self.interval) else: return constructScaffold(trace,[trace.getNodesInBlock(self.scope,self.block)])
def sampleIndex(self,trace): program = trace.proposal_programs[self.program_name] node_set = set() for target in program.tlist: for node in trace.getNodesInBlock(target[0],target[1]): node_set.add(node) # print node.value return constructScaffold(trace, [node_set])
def __call__(self, values): """Returns the gradient of the weight of regenerating along an (implicit) scaffold starting with the given values. Smashes the trace, but leaves it a torus. Assumes there are no delta kernels around.""" # TODO Assert that no delta kernels are requested? self.fixed_regen(values) new_scaffold = constructScaffold(self.trace, [set(self.pnodes)]) registerDeterministicLKernels(self.trace, new_scaffold, self.pnodes, values) (_, rhoDB) = detachAndExtract(self.trace, new_scaffold.border[0], new_scaffold, True) self.scaffold = new_scaffold return [rhoDB.getPartial(pnode) for pnode in self.pnodes]
def sampleLocalIndex(self,trace,local_child): assert(isinstance(local_child, LookupNode) or isinstance(local_child, OutputNode)) setsOfPNodes = [set([local_child])] return constructScaffold(trace,setsOfPNodes,updateValue=self.updateValue,updatedNodes=self.updatedNodes)