Ejemplo n.º 1
0
def test_user_defined_strands(nlevels, SchedType, execfn, expect):
    s1 = ecto.Strand()
    s2 = s1
    s3 = ecto.Strand()

    print "s1.id ==", s1.id
    print "s2.id ==", s2.id
    print "s3.id ==", s3.id
    assert s1.id == s2.id
    assert s3.id != s2.id
    assert s3.id != s1.id

    plasm = ecto.Plasm()
    # plasm.movie_out("strands_%03d.dot")

    gen = ecto_test.Generate("GENERATE", step=1.0, start=1.0)
    noncurr = ecto_test.DontCallMeFromTwoThreads("ALPHA", strand=s1)
    plasm.connect(gen[:] >> noncurr[:])

    for k in range(nlevels):
        n = ecto_test.DontCallMeFromTwoThreads("BETA_%d" % k, strand=s2)
        plasm.connect(noncurr[:] >> n[:])
        noncurr = n

    printer = ecto_test.Printer("PRINTER")
    plasm.connect(noncurr[:] >> printer[:])

    sched = SchedType(plasm)
    print "sched=", sched
    execfn(sched)

    result = noncurr.outputs.out
    print "result=", result, "expect=", expect
    assert (result == expect)
Ejemplo n.º 2
0
    def execute_plasm(self, Sched, nthreads, niter, n_nodes, incdelay):
        plasm = ecto.Plasm()

        gen = ecto_test.Generate("Gen", step=1.0, start=0.0)
        inc = ecto_test.Increment("Increment 0", delay=incdelay)

        plasm.connect(gen, "out", inc, "in")

        for j in range(n_nodes - 1):  # one has already been added
            inc_next = ecto_test.Increment("Increment_%u" % (j + 1),
                                           delay=incdelay)
            plasm.connect(inc, "out", inc_next, "in")
            inc = inc_next

        printer = ecto_test.Printer("Printy")
        plasm.connect(inc, "out", printer, "in")
        #
        #    o = open('graph.dot', 'w')
        #    print >>o, plasm.viz()
        #    o.close()
        #    print "\n", plasm.viz(), "\n"
        sched = Sched(plasm)
        sched.execute(niter)

        print("RESULT:", inc.outputs.out)
        shouldbe = float(n_nodes + niter - 1)
        print("expected:", shouldbe)
        assert inc.outputs.out == shouldbe
Ejemplo n.º 3
0
def make(Schedtype):
    print 'Using :', Schedtype
    plasm = ecto.Plasm()

    gen = ecto_test.Generate("Gen", step=1.0, start=0.0)

    printer = ecto_test.Printer("Printy")
    ecto.log_to_file(fname)
    plasm.connect(gen[:] >> printer[:])
    return Schedtype(plasm)
Ejemplo n.º 4
0
def test_fileI(Scheduler, file_like_object, realfile=False):
    global cards
    plasm = ecto.Plasm()
    if not realfile:
        file_like_object.writelines(filetext)
        file_like_object.seek(0)
    reader = ecto_test.FileI(file=ecto.istream(file_like_object))
    printer = ecto_test.Printer()
    plasm.connect(reader[:] >> printer[:])
    sched = Scheduler(plasm)
    sched.execute()
    assert reader.outputs.output == cards[-1]
Ejemplo n.º 5
0
def test_async_stop_on_destructor():
    generate = ecto_test.Generate()
    param_watcher = ecto_test.ParameterWatcher(value=2)
    sleep = ecto_test.Sleep()
    printer = ecto_test.Printer()
    plasm = ecto.Plasm()
    plasm.connect(generate["out"] >> param_watcher["input"],
                  param_watcher['output'] >> printer[:])
    plasm.insert(sleep)
    #ecto.view_plasm(plasm)
    sched = ecto.Scheduler(plasm)
    sched.execute_async()
    for i in range(0, 10):
        sched.run_job()
Ejemplo n.º 6
0
def test_dealer(Scheduler):
    print "*" *80
    print __name__, 'test_dealer', Scheduler
    plasm = ecto.Plasm()
    printer = ecto_test.Printer()
    cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    dealer = ecto.Dealer(tendril=printer.inputs.at('in'), iterable=cards)
    plasm.connect(dealer['out'] >> printer['in'])
    sched = Scheduler(plasm)
    print 'executing ...'
    sched.execute()
    print 'finished executing'
    assert dealer.outputs.at('out').type_name == 'double'
    assert dealer.outputs.out == 10
Ejemplo n.º 7
0
def test_dealer_heterogenous_type_fail(Scheduler):
    print "*" * 80
    print __name__, 'test_dealer_heterogenous_type_fail', Scheduler
    printer = ecto_test.Printer()
    cards = [1, 2, 3, 4, 5, 'hello', 7, 8, 9, 10]
    dealer = ecto.Dealer(tendril=printer.inputs.at('in'), iterable=cards)
    plasm = ecto.Plasm()
    plasm.connect(dealer['out'] >> printer['in'])
    sched = Scheduler(plasm)
    try:
        sched.execute()
        assert False == " Should have thrown."
    except ecto.FailedFromPythonConversion, e:
        print "Threw as expected:", str(e)
        assert re.findall('cpp_typename.*double', str(e))
Ejemplo n.º 8
0
def test_constant():
    print "test running.."
    c = ecto.Constant(value=0.50505)
    m = ecto_test.Multiply(factor=3.3335)
    print ">>>>DOC>>>>", c.__doc__
    pr = ecto_test.Printer()

    plasm = ecto.Plasm()
    plasm.connect(c[:] >> m[:], m[:] >> pr[:])

    plasm.execute()

    assert m.outputs.out == (0.50505 * 3.3335)
    plasm.execute()

    assert m.outputs.out == (0.50505 * 3.3335)
Ejemplo n.º 9
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)
Ejemplo n.º 10
0
def test_parameter_callbacks():
    generate = ecto_test.Generate()
    param_watcher = ecto_test.ParameterWatcher(value=2)
    sleep = ecto_test.Sleep()
    printer = ecto_test.Printer()
    plasm = ecto.Plasm()
    plasm.connect(generate["out"] >> param_watcher["input"],
                  param_watcher['output'] >> printer[:])
    plasm.insert(sleep)
    #ecto.view_plasm(plasm)
    sched = ecto.Scheduler(plasm)
    sched.execute_async(1)
    sched.run_job()  # check plasm, init parms, and compute_stack
    number = 1000
    param_watcher.params.value = number
    sched.run()

    assert 1000 == param_watcher.outputs.value
    def test_0_save_plasm(self):
        n_nodes = 5
        incdelay = 1
        plasm = ecto.Plasm()

        gen = ecto_test.Generate("Gen", step=1.0, start=0.0)
        inc = ecto_test.Increment("Increment 0", delay=incdelay)

        plasm.connect(gen, "out", inc, "in")

        for j in range(n_nodes - 1):  # one has already been added
            inc_next = ecto_test.Increment("Increment_%u" % (j + 1),
                                           delay=incdelay)
            plasm.connect(inc, "out", inc_next, "in")
            inc = inc_next

        printer = ecto_test.Printer("Printy")
        plasm.connect(inc, "out", printer, "in")
        plasm.save(self.FILE)
Ejemplo n.º 12
0
def shouldfail():
    plasm = ecto.Plasm()

    gen = ecto_test.Generate(step=1.0, start=1.0)
    nc1 = ecto_test.DontCallMeFromTwoThreads()
    plasm.connect(gen, "out", nc1, "in")

    nc2 = ecto_test.DontCallMeFromTwoThreads()
    plasm.connect(nc1, "out", nc2, "in")

    printer = ecto_test.Printer()
    plasm.connect(nc2, "out", printer, "in")

    sched = ecto.Scheduler(plasm)
    try:
        print "about to execute... this should throw"
        sched.execute(niter=4)
        util.fail()
    except RuntimeError, e:
        print "good, python caught error", e
Ejemplo n.º 13
0
def test_implicit_strands(nlevels, SchedType, execfn, expect):
    plasm = ecto.Plasm()

    gen = ecto_test.Generate(step=1.0, start=1.0)
    noncurr = ecto_test.CantCallMeFromTwoThreads()
    plasm.connect(gen, "out", noncurr, "in")

    for k in range(nlevels):
        next = ecto_test.CantCallMeFromTwoThreads()
        plasm.connect(noncurr, "out", next, "in")
        noncurr = next

    printer = ecto_test.Printer()
    plasm.connect(noncurr, "out", printer, "in")

    sched = SchedType(plasm)
    print "sched=", sched
    execfn(sched)

    result = noncurr.outputs.out
    print "result=", result
    assert (result == expect)
Ejemplo n.º 14
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.Scheduler(plasm)
    sched.execute(niter=1)
    result = add.outputs.out
    print "result=", result
    assert (result == nlevels * 2)

    sched.execute(niter=2)
    result = add.outputs.out
    print "iter2 result=", result
    assert result == (nlevels + 2) * 2

    sched.execute(niter=3)
    result = add.outputs.out
    print "iter3 result=", result
    assert result == (nlevels + 5) * 2
Ejemplo n.º 15
0
    #test the old syntax.
    p.connect(scatter, "out_0000", gather, "in_0000")

    try:
        p2 = ecto.Plasm()
        p2.connect(scatter, "out_0000", gather, "idn_0001")
        util.fail()
    except ecto.NonExistant, e:
        print ">>>", e
        assert "'in_0000':type(int) 'in_0001':type(int) 'in_0002':type(int)" in str(
            e)
        print "(threw as expected)\n\n"

    try:
        p2 = ecto.Plasm()
        p2.connect(gather["out"] >> ecto_test.Printer(
            print_type="double")["in"])
        util.fail("Should not work as there is a type mismatch...")
    except ecto.TypeMismatch, e:
        print "type:", type(e)
        print ">>>", e
        assert re.findall("from_typename.*int", str(e))
        assert re.findall("to_typename.*double", str(e))
        print "(threw as expected)"

    try:
        p2 = ecto.Plasm()
        p2.connect(gather["out"], ecto_test.Printer(print_type="double")["in"])
        util.fail("Should not work.")
    except RuntimeError, e:
        print e
        assert 'Did you mean' in str(e)
Ejemplo n.º 16
0
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
import ecto, sys, util
import ecto.ecto_test as ecto_test

print ecto_test.RequiredIO.__doc__
#test
assert "out [double] REQUIRED" in ecto_test.RequiredIO.__doc__
assert "in [double] REQUIRED" in ecto_test.RequiredIO.__doc__

gen = ecto_test.Generate()
req = ecto_test.RequiredIO()
out = ecto_test.Printer(print_type="double")

try:
    p = ecto.Plasm()
    p.connect(gen[:] >> req[:])
    print "checking..."
    p.check()
    util.fail()
except Exception, e:
    print str(e)
    assert "NotConnected" in str(e)
    print e, '(threw as expected)'

try:
    p = ecto.Plasm()
    p.connect(req[:] >> out[:])
Ejemplo n.º 17
0
 def configure(self, p, i, o):
     self.fail = p.at('fail').val
     self.printer = ecto_test.Printer()
Ejemplo n.º 18
0
#       contributors may be used to endorse or promote products derived from
#       this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
import ecto
import ecto.ecto_test as ecto_test
import sys, time

plasm = ecto.Plasm()

uni = ecto_test.Uniform01("Random", seed=17)
print "OUTPUTS:", uni.outputs
printer = ecto_test.Printer("Printy")
print ecto.version()

plasm.connect(uni["out"] >> (printer["in"]))

sched = ecto.Scheduler(plasm)
sched.execute(niter=100)
Ejemplo n.º 19
0
    import ecto.ecto_test as ecto_test
    import yaml
    import argparse
    parser = argparse.ArgumentParser(description='My awesome program thing.')
    parser.add_argument('-i,--input',
                        metavar='IMAGE_FILE',
                        dest='imagefile',
                        type=str,
                        default='',
                        help='an image file to load.')
    scheduler_options(parser, default_niter=2)

    multiply_factory = cell_options(parser, ecto_test.Multiply, prefix='mult')
    const_factory = cell_options(parser,
                                 ecto.Constant(value=0.50505),
                                 prefix='const')

    #parser.print_help()
    options = parser.parse_args()

    c = const_factory(options)
    m = multiply_factory(options)
    cyaml = CellYamlFactory(c, 'const')
    print cyaml.dump()
    c = cyaml.load(yaml.load(cyaml.dump()))
    pr = ecto_test.Printer()
    plasm = ecto.Plasm()
    plasm.connect(c[:] >> m[:], m[:] >> pr[:])

    run_plasm(options, plasm, locals=vars())
Ejemplo n.º 20
0
 def configure(self, p, i, o):
     self.printer = ecto_test.Printer()