# 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.isynced import isynced as synced from bu4.parsing.toolchain.readfile import readfile from bu4.tracing.probe import Probe from bu4.tracing.trace import trace 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()