# Copyright (c) PARRRATE T&V 2021. All rights reserved. import random from collections import deque from bu4.common_interface import with_common_interface from bu4.evaluation.constructs.proxy import antiproxy, eproxy from bu4.evaluation.sync import sync from bu4.parsing.toolchain.readfile import readfile from bu4.synced import synced from bu4.tracing.probe import trace, Probe from timesample import TimeSample with TimeSample('all'): with TimeSample('sys0'): with TimeSample('compilation'): sys0 = synced(readfile('src/sys0')) with TimeSample('first, AP'): TimeSample.print( antiproxy(sys0)(0)(1)( lambda a: lambda b: a + b )( lambda n: lambda x: lambda y: x if n == 0 else y )( lambda n: lambda x: lambda y: x if n & 1 else y )( lambda n: n >> 1 ) ) with TimeSample('second, AP'): TimeSample.print( antiproxy(sys0)(0)(1)( lambda a: lambda b: a + b )( lambda n: lambda x: lambda y: x if n == 0 else y )( lambda n: lambda x: lambda y: x if n & 1 else y )( lambda n: n >> 1 ) ) with TimeSample('third, EP'): sys0 = with_common_interface(sys0) TimeSample.print(sys0) with TimeSample('sys2'): with TimeSample('compilation'): sys2c = synced(readfile('src/sys2')) with TimeSample('runtime'): sys2 = sys2c sys2 = with_common_interface(sys2) TimeSample.print(sys2) with TimeSample('runtime'): sys2 = sys2c sys2 = with_common_interface(sys2) TimeSample.print(sys2) with TimeSample('sys3'): sys3 = with_common_interface(synced(readfile('src/sys3'))) sys3 = sync(sys3.call(eproxy(5))) TimeSample.print(sys3) with TimeSample('sys1'): sys1 = with_common_interface(synced(readfile('src/sys1'))) random.seed(42) sys1 = sync(sys1.call(eproxy(random.randrange(2 ** 10)))) sys1 = sync(sys1.call(eproxy(random.randrange(2 ** 10)))) sys1 = sync(sys1.call(eproxy(random.randrange(2 ** 10)))) TimeSample.print(sys1) with TimeSample('sys4'): TimeSample.print(with_common_interface(synced(readfile('src/sys4')))) with TimeSample('sys5'): sys5 = synced(readfile('src/sys5')) queue = deque([(0, 0, sys5)]) for trace_index in range(1, 100 + 1): if not queue: break tab, parent, evaluable = queue.popleft() for _ in range(10000): evaluable = evaluable.next() _probe_index, probe = trace(evaluable) prefix = ('.', ' ' * tab, parent, trace_index) if isinstance(probe, Probe): start, list_ = probe.start_and_list() TimeSample.print(*prefix, _probe_index, probe) queue.extend((tab + 1, trace_index, deeper_evaluable) for deeper_evaluable in list_) else: TimeSample.print(*prefix, '...') with TimeSample('sys6'): sys6 = synced(readfile('src/sys6')).call(synced('?')) for _ in range(100): sys6 = sys6.next() print(sys6) for _ in range(10000000): sys6 = sys6.next()