示例#1
0
文件: demo.py 项目: yarray/frpy
def compl3():
    clk, tick = clock()
    sp = fmap(lambda _: random.random(), repeat(0.2, clk))
    events = merge([clk, sp], ['clock', 'value'])

    def update(state: Tuple[float, float], event) -> Tuple[float, float]:
        channel, data = event
        start_at, acc = state
        if channel == 'clock':
            if data - start_at > time_thres:
                print('failed')
                return (data, 0)
            return state
        if channel == 'value':
            new_value = acc + data
            print(new_value)
            if new_value >= value_thres:
                print('met')
                return (time.time(), 0)
            return (start_at, new_value)
        else:
            return state

    scan(update, (time.time(), 0), events)
    tick()
示例#2
0
文件: demo.py 项目: yarray/frpy
def compl2():
    # compl using async transformation
    clk, tick = clock()
    sp = fmap(soft(random.random), repeat(0.2, clk))

    # aysnc generator transformation
    async def fn(s):
        acc = 0
        last = math.inf
        async for topic, v in s:
            if topic == 'clock':
                if acc > value_thres:
                    met = True
                if v - last > time_thres or acc > value_thres:
                    yield 'met' if met else 'fail'
                    yield 0
                    met = False
                    acc = 0
                    last = v

            elif topic == 'value':
                acc += v
                yield acc

    # map the transformation over async generators to that over streams
    res = fmap_async(fn, merge([clk, sp], ['clock', 'value']))

    # hook to print trace
    res.hook = print
    tick()
示例#3
0
文件: demo.py 项目: yarray/frpy
def compl():
    # init the clock
    clk, tick = clock()

    # construct streams
    sp = fmap(soft(random.random), repeat(0.2, clk))
    term = Stream(clk)
    interrupt = timeout(time_thres, term, term)
    value = merge([sp, fmap(const(-1), term)])
    acc = scan(lambda acc, v: acc + v if v >= 0 else 0, 0, value)
    met = changed(lambda _, y: y <= value_thres, acc)
    each(term, merge([met, interrupt]))

    # hook to print trace
    acc.hook = print
    met.hook = bind(print, 'met!')
    interrupt.hook = bind(print, 'fail!')

    # start clock
    tick()
示例#4
0
文件: demo.py 项目: yarray/frpy
def main():
    clk, tick = clock()
    sp = sequence(1, iter(range(1, 1000)), clk)
    sn = sequence(2, iter(range(-1, -1000, -1)), clk)
    sns = scan(lambda acc, x: acc + x, 0, sn)
    spu = changed(lambda x, y: x == y, sp)
    spuf = where(lambda x: x % 3 != 0, spu)
    sm = merge([spuf, sns])
    ss = trace(lambda x: x % 2, 9999, sm)
    sst = flatten(fmap(lambda s: diff(lambda x, y: y - x, 0, s), ss))
    sst.hook = print
    sp(2)
    sp(1)
    sp(1)

    sstop = fmap(lambda _: 'stop', repeat(5, clk))
    sto = timeout(1.5, sstop, sn)
    events = merge([sn, sstop, sto])
    events.hook = print

    tick()
示例#5
0
def test_merge_topic():
    s1 = Stream(None)
    s2 = Stream(None)
    s3 = Stream(None)
    s = record(merge([s1, s2, s3], ['s1', 's2', 's3']))
    s1(123)
    s2(456)
    s1(12)
    s1(42)
    s3(500)
    s2(789)
    assert s.footprint == [('s1', 123), ('s2', 456), ('s1', 12), ('s1', 42),
                           ('s3', 500), ('s2', 789)]
示例#6
0
文件: demo.py 项目: yarray/frpy
def timing():
    clk, tick = clock()
    a = fmap(lambda _: 1, repeat(0.3, clk))
    b = fmap(lambda _: 22222222, a)
    each(print, merge([a, b]))
    tick()