def build_addergraph(nlevels): plasm = ecto.Plasm() #deprecating the movie_out stuff. #plasm.movie_out("frames/ecto%04u.viz"); prevlevel = [ ecto_test.Add("Adder 0_%u" % x) for x in range(2**(nlevels - 1)) ] for adder in prevlevel: gen0 = ecto_test.Generate("Generator", step=1.0, start=1.0) gen1 = ecto_test.Generate("Generator", step=1.0, start=1.0) conn1 = gen0["out"] >> adder["left"] conn2 = gen1["out"] >> adder["right"] print "conn1=", conn1 plasm.connect(conn1, conn2) print "prev has", len(prevlevel) for k in range(nlevels - 2, -1, -1): print "****** k=", k, " ***********" thislevel = [ ecto_test.Add("Adder %u_%u" % (k, x)) for x in range(2**k) ] print "prevlevel=", prevlevel print "thislevel=", thislevel index = 0 print "for...", range(2**k) for r in range(2**k): print "prev[%u] => cur[%u]" % (index, r) conn = prevlevel[index]["out"] >> thislevel[r]["left"] print "conn=", conn plasm.connect(conn) index += 1 print "prev[%u] => cur[%u]" % (index, r) conn2 = prevlevel[index]["out"] >> thislevel[r]["right"] print "conn2=", conn2 plasm.connect(conn2) index += 1 prevlevel = thislevel assert len(prevlevel) == 1 final_adder = prevlevel[0] printer = ecto_test.Printer("printy!") #plasm.connect(final_adder, "out", printer, "in") return (plasm, final_adder)
def test_feedback(): plasm = ecto.Plasm() g = ecto_test.Generate("Generator", step=1.0, start=1.0) add = ecto_test.Add() print ecto.EntangledPair.__doc__ source, sink = ecto.EntangledPair(value=add.inputs.at('left')) plasm.connect(source[:] >> add['left'], g[:] >> add['right'], add[:] >> sink[:]) previous = 0 for i in range(1, 5): plasm.execute(niter=1) print add.outputs.out print "expected: ", i + previous assert add.outputs.out == i + previous # 0 + 1 = 1 previous = i + previous
def test_dual_line_plasm(nlevels): plasm = ecto.Plasm() gen = ecto_test.Generate(step=1.0, start=0.0) incl, incr = ecto_test.Increment(), ecto_test.Increment() plasm.connect(gen, "out", incl, "in") plasm.connect(gen, "out", incr, "in") for j in range(nlevels-1): # one set of incs has already been added print j inc_nextl, inc_nextr = ecto_test.Increment(), ecto_test.Increment() plasm.connect(incl, "out", inc_nextl, "in") plasm.connect(incr, "out", inc_nextr, "in") incl, incr = inc_nextl, inc_nextr add = ecto_test.Add() plasm.connect(incl, "out", add, "left") plasm.connect(incr, "out", add, "right") printer = ecto_test.Printer() plasm.connect(add, "out", printer, "in") sched = ecto.schedulers.Threadpool(plasm) sched.execute(niter=1, nthreads=int(nlevels/2)) result = add.outputs.out print "result=", result assert(result == nlevels * 2) sched.execute(niter=2, nthreads=int(nlevels/2)) result = add.outputs.out print "iter2 result=", result assert result == (nlevels + 2) * 2 sched.execute(niter=3, nthreads=int(nlevels/2)) result = add.outputs.out print "iter3 result=", result assert result == (nlevels + 5) * 2
#!/usr/bin/python import ecto import ecto_test plasm = ecto.Plasm() gen = ecto_test.Generate() inc = ecto_test.Increment() mul = ecto_test.Multiply() add = ecto_test.Add() plasm.connect( gen[:] >> inc[:], gen[:] >> mul[:], mul[:] >> add['left'], inc[:] >> add['right'], )