def apply(self, inputs): # This assumes `inputs` are already broadcast out = head(inputs) extent = out.dims.extent inputs = tail(inputs) for i in range(extent): out[i] = eval(self.subterm, index(inputs, i)) return out
def ckernel_element_wrapper(p): data = p[0] out = head(data.inputs) inputs = tail(data.inputs) out[0] = eval(data.term, inputs)
def index(inputs, i): hd = head(inputs) tl = tail(inputs) return StaticTuple(hd[i], index(tl, i))
def lookup(args, n): """Look up the nth argument""" return lookup(tail(args), n.pred)
def eval_subterms(subterms, inputs): """Evaluate the given `subterms` (code) with the given `inputs` (data)""" hd = eval(head(subterms), inputs) tl = eval_subterms(tail(subterms), inputs) return StaticTuple(hd, tl)