Source code for pyadi.dummyad

import sys
from .astvisitor import isbuiltin
from .runtime import unjnd, dzeros


me = sys.modules[__name__]


call1 = [
    'binop_add', 'binop_sub', 'binop_mult', 'binop_matmult', 'binop_div', 'binop_floordiv', 'binop_mod', 'binop_pow',
    'unaryop_uadd', 'unaryop_usub'
]
call2 = ['super']


[docs] def mkCall(f): def run(*args, **kw): d_kw, kw = unjnd(kw) # print(f'Run function {f.__name__} ({args}), kw={kw}, d_kw={d_kw}') dres = f(*args[1::2], **kw) dres = dzeros(dres) res = f(*args[1::2], **kw) # print(f'dzeros {res} {dres}') return dres, res return run
[docs] def mkCall2(f): def run2(*args, **kw): d_kw, kw = unjnd(kw) # print(f'Run function {f.__name__} ({args}), kw={kw}, d_kw={d_kw}') # super is given two superfluous excess arguments now... dres = f(*args[2::2], **d_kw) res = f(*args[3::2], **kw) #dres = dzeros(res) #print(f'dzeros {res} {dres}') return dres, res return run2
[docs] def decorator(**opts): def inner(done, key, f, *args, **kw): # print(f'D1 {f.__qualname__} before') if f.__name__ in call2: return mkCall2(f) if isbuiltin(f) or f.__qualname__ in call1: return mkCall(f) res = done(key) # print(f'D1 {f.__qualname__} after') return res return inner
# (c) 2023 AI & IT UG # Author: Johannes Willkomm jwillkomm@ai-and-it.de