Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
#!/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'],
)