def gen_to_tree(g): n = tree.Node(cargo=g) #== if g.__name__ == 'broadcast' : children = g.gi_frame.f_locals['targets'] elif g.__name__ == 'sink' : children = [] else : children = [g.gi_frame.f_locals['target']] #== for child in children: tree.connect(gen_to_tree(child), n) return n
def setup_graph(nb, nb_cnx): elements = map(gen_el, range(nb)) root = elements[0] for idx, el in enumerate(elements): rst = elements[:idx] if not rst: continue ii = min(nb_cnx, len(rst)) els = random.sample(rst, ii) for e in els: if el in e.children: continue tree.connect(el, e) #== for el in elements: if el != root: assert el.parents assert root.children #== return root, elements
def func_to_node(f): sink = f.__dict__.get('sink') if sink: gen = base.sink else : gen = base.transformer gp = base.GeneratorProto(gen, f) tn = graph.TNode(cargo=gp) #== if not sink: os = graph.OSlot() tree.connect(os, tn) else: os = None #== if f.__code__.co_varnames: nb_arg = 1 else : nb_arg = f.__code__.co_argcount islots = [] for i in range(nb_arg): islot = graph.ISlot() islots.append(islot) tree.connect(tn, islot) #== return islots, tn, os
def test(): gp = base.GeneratorProto(base.value, 5) tn = graph.TNode(cargo=gp) os = graph.OSlot() tree.connect(os, tn) #== oss = [os] for i in range(100): op = random.choice([add, minus, inc, decr]) iss, _, os = func_to_node(op) for i in iss: tree.connect(i, random.choice(oss)) oss.append(os) #== op = pprint iss, _, os = func_to_node(op) while oss: tree.connect(random.choice(iss), oss.pop()) assert not oss return tn