deep_trace + refactor

This commit is contained in:
AF 2021-09-12 13:33:13 +03:00
parent de5a8ed899
commit 609371048d
33 changed files with 139 additions and 125 deletions

View File

@ -1,17 +1,18 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.combinatory.lcombinatory import LCombinatory
from bu4.encoding.codes import CODE_CMBI
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.linkable.evaluation.elvtype import elvtype
from bu4.parsing.codes import CODE_CMBI
from bu4.linking.constructs.linked import Linked
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
__all__ = ('EIC', 'IIC', 'XII', 'LIC',)
__all__ = ('EIC', 'IIC', 'XII', 'LIC', 'XLI',)
class EIC(EValue):
@ -51,3 +52,8 @@ class LIC(LCombinatory):
def __str__(self):
return f'I'
class XLI(CodeExtension[Linked], code=CODE_CMBI):
def apply(self) -> TransformState[Linked]:
return TransformFinished(LIC())

View File

@ -1,18 +1,19 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.combinatory.lcombinatory import LCombinatory
from bu4.encoding.codes import CODE_CMBK
from bu4.evaluation.constructs.edelayed import EDelayed
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.linkable.evaluation.elvtype import elvtype
from bu4.parsing.codes import CODE_CMBK
from bu4.linking.constructs.linked import Linked
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
__all__ = ('EKC', 'IKC', 'XIK', 'LKC',)
__all__ = ('EKC', 'IKC', 'XIK', 'LKC', 'XLK',)
class EKC(EValue):
@ -52,3 +53,8 @@ class LKC(LCombinatory):
def __str__(self):
return f'K'
class XLK(CodeExtension[Linked], code=CODE_CMBK):
def apply(self) -> TransformState[Linked]:
return TransformFinished(LKC())

View File

@ -1,6 +1,7 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.combinatory.lcombinatory import LCombinatory
from bu4.encoding.codes import CODE_CMBS
from bu4.evaluation.av.aftervalue import AfterValue
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue
@ -9,12 +10,12 @@ from bu4.evaluation.targets.avcall import AVCall
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.linkable.evaluation.elvtype import elvtype
from bu4.parsing.codes import CODE_CMBS
from bu4.linking.constructs.linked import Linked
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
__all__ = ('ESC', 'ESC1', 'ESC2', 'ISC', 'XIS', 'LSC',)
__all__ = ('ESC', 'ESC1', 'ESC2', 'ISC', 'XIS', 'LSC', 'XLS',)
class ESC2(EValue):
@ -86,3 +87,8 @@ class LSC(LCombinatory):
def __str__(self):
return f'S'
class XLS(CodeExtension[Linked], code=CODE_CMBS):
def apply(self) -> TransformState[Linked]:
return TransformFinished(LSC())

16
bu4/encoding/codes.py Normal file
View File

@ -0,0 +1,16 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
CODE_NULL = 0x00
CODE_CALL = 0x01
CODE_MAKE = 0x02
CODE_NAME = 0x03
CODE_SKIP = 0x04
CODE_QUOT = 0x05
CODE_QOPN = 0x06
CODE_QCLS = 0x07
CODE_XCPT = 0x08
CODE_DLYD = 0x09
CODE_CMBI = 0x49
CODE_CMBK = 0x4b
CODE_CMBS = 0x53

View File

@ -1,12 +1,12 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_CALL
from bu4.evaluation.av.aftervalue import AfterValue
from bu4.evaluation.constructs.eattachable import EAttachable
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.targets.avcall import AVCall
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.parsing.codes import CODE_CALL
from bu4.transform.states.aftertransform import AfterTransform
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstart import TransformStart

View File

@ -1,11 +1,11 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_DLYD
from bu4.evaluation.constructs.eattachable import EAttachable
from bu4.evaluation.constructs.edelayed import EDelayed
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.parsing.codes import CODE_DLYD
from bu4.transform.states.aftertransform import AfterTransform
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstart import TransformStart

View File

@ -1,10 +1,10 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_XCPT
from bu4.evaluation.constructs.eexception import EException
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.parsing.codes import CODE_XCPT
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState

View File

@ -1,10 +1,10 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_MAKE
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eilambda import EILambda
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.parsing.codes import CODE_MAKE
from bu4.transform.states.aftertransform import AfterTransform
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstart import TransformStart

View File

@ -1,9 +1,9 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_NAME
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.parsing.codes import CODE_NAME
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState

View File

@ -1,10 +1,10 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_NULL
from bu4.evaluation.constructs.enull import ENull
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.evaluation.eivtype import eivtype
from bu4.parsing.codes import CODE_NULL
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState

View File

@ -1,8 +1,8 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_CALL
from bu4.indexing.constructs.icall import ICall
from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_CALL
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState

View File

@ -1,8 +1,8 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_DLYD
from bu4.indexing.constructs.idelayed import IDelayed
from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_DLYD
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState

View File

@ -1,8 +1,8 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_MAKE
from bu4.indexing.constructs.ilambda import ILambda
from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_MAKE
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState

View File

@ -1,8 +1,8 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_NAME
from bu4.indexing.constructs.iname import IName
from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_NAME
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState

View File

@ -1,8 +1,8 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_NULL
from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.constructs.inull import INull
from bu4.parsing.codes import CODE_NULL
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState

View File

@ -1,8 +1,8 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_XCPT
from bu4.indexing.constructs.iexception import IException
from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_XCPT
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState

View File

@ -1,5 +1,6 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.combinatory.tocombinatory import to_combinatory
from bu4.evaluation.constructs.evalue import EValue
from bu4.evaluation.sync import sync
from bu4.linkable.toolchain.parse import parse
@ -10,10 +11,12 @@ from bu4.transform.transform import transform
__all__ = ('isynced',)
def isynced(source: str) -> EValue:
def isynced(source: str, *, combinatory=False) -> EValue:
bsource = transply(source)
parsed = parse(bsource, standard_extensions)
linked = transform(parsed.link(set()))
if combinatory:
linked = transform(to_combinatory(linked))
indexed = transform(linked.index([]))
evaluable = indexed.attach([])
return sync(evaluable)

View File

@ -1,15 +1,15 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_CALL
from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pcall import PCall
from bu4.parsing.codes import CODE_CALL
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState
__all__ = ('XCall',)
__all__ = ('XLCall',)
class XCall(CodeExtension[Parsed], code=CODE_CALL):
class XLCall(CodeExtension[Parsed], code=CODE_CALL):
def apply(self) -> TransformState[Parsed]:
return self.readlambda(
lambda argument: self.readlambdafinished(

View File

@ -1,15 +1,15 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_DLYD
from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pdelayed import PDelayed
from bu4.parsing.codes import CODE_DLYD
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState
__all__ = ('XDlyd',)
__all__ = ('XLDlyd',)
class XDlyd(CodeExtension[Parsed], code=CODE_DLYD):
class XLDlyd(CodeExtension[Parsed], code=CODE_DLYD):
def apply(self) -> TransformState[Parsed]:
return self.readlambdafinished(
lambda value: PDelayed(value)

View File

@ -1,15 +1,15 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_MAKE
from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.plambda import PLambda
from bu4.parsing.codes import CODE_MAKE
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState
__all__ = ('XMake',)
__all__ = ('XLMake',)
class XMake(CodeExtension[Parsed], code=CODE_MAKE):
class XLMake(CodeExtension[Parsed], code=CODE_MAKE):
def apply(self) -> TransformState[Parsed]:
name = self.parser.parse_name()
return self.readlambdafinished(

View File

@ -1,15 +1,15 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_NAME
from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pname import PName
from bu4.parsing.codes import CODE_NAME
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
__all__ = ('XName',)
__all__ = ('XLName',)
class XName(CodeExtension[Parsed], code=CODE_NAME):
class XLName(CodeExtension[Parsed], code=CODE_NAME):
def apply(self) -> TransformState[Parsed]:
return TransformFinished(PName(self.parser.parse_name()))

View File

@ -1,15 +1,15 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_NULL
from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pnull import PNull
from bu4.parsing.codes import CODE_NULL
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
__all__ = ('XNull',)
__all__ = ('XLNull',)
class XNull(CodeExtension[Parsed], code=CODE_NULL):
class XLNull(CodeExtension[Parsed], code=CODE_NULL):
def apply(self) -> TransformState[Parsed]:
return TransformFinished(PNull())

View File

@ -1,13 +1,13 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_QOPN, CODE_QCLS
from bu4.linkable.constructs.parsed import Parsed
from bu4.parsing.codes import CODE_QOPN, CODE_QCLS
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState
__all__ = ('XQopn',)
__all__ = ('XLQopn',)
class XQopn(CodeExtension[Parsed], code=CODE_QOPN):
class XLQopn(CodeExtension[Parsed], code=CODE_QOPN):
def apply(self) -> TransformState[Parsed]:
return self.endswith(CODE_QCLS, 'quot expected')

View File

@ -1,13 +1,13 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_QUOT
from bu4.linkable.constructs.parsed import Parsed
from bu4.parsing.codes import CODE_QUOT
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformstate import TransformState
__all__ = ('XQuot',)
__all__ = ('XLQuot',)
class XQuot(CodeExtension[Parsed], code=CODE_QUOT):
class XLQuot(CodeExtension[Parsed], code=CODE_QUOT):
def apply(self) -> TransformState[Parsed]:
return self.endswith(CODE_QUOT, 'quot expected')

View File

@ -1,14 +1,14 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_SKIP
from bu4.linkable.constructs.parsed import Parsed
from bu4.parsing.codes import CODE_SKIP
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.parsing.states.parsingread import ParsingRead
from bu4.transform.states.transformstate import TransformState
__all__ = ('XSkip',)
__all__ = ('XLSkip',)
class XSkip(CodeExtension[Parsed], code=CODE_SKIP):
class XLSkip(CodeExtension[Parsed], code=CODE_SKIP):
def apply(self) -> TransformState[Parsed]:
return ParsingRead(self.parser)

View File

@ -1,15 +1,15 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.encoding.codes import CODE_XCPT
from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pexception import PException
from bu4.parsing.codes import CODE_XCPT
from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
__all__ = ('XXcpt',)
__all__ = ('XLXcpt',)
class XXcpt(CodeExtension[Parsed], code=CODE_XCPT):
class XLXcpt(CodeExtension[Parsed], code=CODE_XCPT):
def apply(self) -> TransformState[Parsed]:
return TransformFinished(PException(self.parser.parse_name()))

View File

@ -1,25 +1,25 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.linkable.extensions.xcall import XCall
from bu4.linkable.extensions.xdlyd import XDlyd
from bu4.linkable.extensions.xmake import XMake
from bu4.linkable.extensions.xname import XName
from bu4.linkable.extensions.xnull import XNull
from bu4.linkable.extensions.xqopn import XQopn
from bu4.linkable.extensions.xquot import XQuot
from bu4.linkable.extensions.xskip import XSkip
from bu4.linkable.extensions.xxcpt import XXcpt
from bu4.linkable.extensions.xlcall import XLCall
from bu4.linkable.extensions.xldlyd import XLDlyd
from bu4.linkable.extensions.xlmake import XLMake
from bu4.linkable.extensions.xlname import XLName
from bu4.linkable.extensions.xlnull import XLNull
from bu4.linkable.extensions.xlqopn import XLQopn
from bu4.linkable.extensions.xlquot import XLQuot
from bu4.linkable.extensions.xlskip import XLSkip
from bu4.linkable.extensions.xlxcpt import XLXcpt
__all__ = ('standard_extensions',)
standard_extensions = (
XNull,
XCall,
XMake,
XName,
XSkip,
XQuot,
XQopn,
XXcpt,
XDlyd,
XLNull,
XLCall,
XLMake,
XLName,
XLSkip,
XLQuot,
XLQopn,
XLXcpt,
XLDlyd,
)

View File

@ -2,7 +2,7 @@
from io import BytesIO
from bu4.parsing.codes import *
from bu4.encoding.codes import *
__all__ = ('transply',)

View File

@ -1,15 +0,0 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
CODE_NULL = 0
CODE_CALL = 1
CODE_MAKE = 2
CODE_NAME = 3
CODE_SKIP = 4
CODE_QUOT = 5
CODE_QOPN = 6
CODE_QCLS = 7
CODE_XCPT = 8
CODE_DLYD = 9
CODE_CMBI = 10
CODE_CMBK = 11
CODE_CMBS = 12

30
bu4/tracing/deep_trace.py Normal file
View File

@ -0,0 +1,30 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from collections import deque
from bu4.tracing.probe import Probe
from bu4.tracing.trace import trace
__all__ = ('deep_trace',)
def deep_trace(sysx, *, length=1000, depth=10000):
hist = []
queue = deque([(0, 0, sysx)])
for trace_index in range(1, length + 1):
hist.append(trace_index)
if not queue:
break
tab, parent, evaluable = queue.popleft()
hist.append(parent)
for _ in range(depth):
evaluable = evaluable.next()
_probe_index, probe = trace(evaluable)
hist.append(_probe_index)
if isinstance(probe, Probe):
start, list_ = probe.start_and_list()
hist.append(start)
queue.extend((tab + 1, trace_index, deeper_evaluable) for deeper_evaluable in list_)
else:
hist.append(None)
return hist

View File

@ -3,10 +3,13 @@
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue
__all__ = ('Probe', 'ProbeA',)
__all__ = ('Probe',)
class Probe(EValue):
def __new__(cls, *args, **kwargs):
return object.__new__(ProbeA if cls == Probe else cls)
def call(self, argument: Evaluable) -> Evaluable:
return ProbeB(self, argument)

View File

@ -8,7 +8,7 @@ from bu4.evaluation.constructs.evalue import EValue
from bu4.evaluation.sync import sync
from bu4.indexing.evaluation.eilambda import EILambda
from bu4.linkable.evaluation.ellambda import ELLambda
from bu4.tracing.probe import ProbeA
from bu4.tracing.probe import Probe
__all__ = ('trace', 'probe_index_reset',)
@ -21,7 +21,7 @@ def trace(lambda_: EValue):
while True:
if not isinstance(lambda_, (ELLambda, EILambda, EIC, EKC, ESC, ESC1, ESC2, EDelayed)):
return size, lambda_
lambda_ = sync(lambda_.call(ProbeA(_probe_index)))
lambda_ = sync(lambda_.call(Probe(_probe_index)))
_probe_index += 1
size += 1

43
main.py
View File

@ -1,56 +1,15 @@
# 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.linkable.toolchain.parse import parse
from bu4.linkable.toolchain.readfile import readfile
from bu4.linkable.toolchain.stdext import standard_extensions
from bu4.linkable.toolchain.transply import transply
from bu4.combinatory.tocombinatory import to_combinatory
from bu4.tracing.probe import Probe
from bu4.tracing.trace import trace
from bu4.transform.transform import transform
from bu4.tracing.deep_trace import deep_trace
from timesample import TimeSample
def deep_trace(sysx):
hist = []
queue = deque([(0, 0, sysx)])
for trace_index in range(1, 1000 + 1):
hist.append(trace_index)
if not queue:
break
tab, parent, evaluable = queue.popleft()
hist.append(parent)
for _ in range(10000):
evaluable = evaluable.next()
_probe_index, probe = trace(evaluable)
hist.append(_probe_index)
# prefix = ('.', ' ' * tab, parent, trace_index)
if isinstance(probe, Probe):
start, list_ = probe.start_and_list()
hist.append(start)
for i in range(len(list_)):
for _ in range(10000):
list_[i] = list_[i].next()
# TimeSample.print(*prefix, _probe_index, 'probe', start, f'[ {" ; ".join(map(str, list_))} ]')
queue.extend((tab + 1, trace_index, deeper_evaluable) for deeper_evaluable in list_)
else:
hist.append(None)
# TimeSample.print(*prefix, '...')
return hist
print(transform(to_combinatory(transform(parse(transply(
'/[b]/[a](x)(y)/[x][y]'
), standard_extensions).link({b'a', b'b'})))))
with TimeSample('all'):
with TimeSample('sys0'):
with TimeSample('compilation'):