Source code for pyadi.runtime

from itertools import chain
from astunparse.astnode import isgeneric, fields
import numpy as np

[docs] class lzip:
[docs] def __init__(self, *args): self.zip = zip(*args)
def __iter__(self): return self def __next__(self): item = next(self.zip) return list(item)
[docs] def dzeros(args, lev=0): #print(f'dzeros {args}') lev += 1 if isinstance(args, type) or lev > 3: return args elif isinstance(args, list): return [dzeros(f, lev) for f in args] elif isinstance(args, tuple) or args.__class__.__name__ in ['dict_values', 'dict_keys', 'dict_items']: return tuple([dzeros(f, lev) for f in args]) elif isinstance(args, dict): return {f: dzeros(v, lev) for f, v in args.items()} elif hasattr(args, 'flat'): return np.zeros(args.shape, dtype=args.dtype) elif isinstance(args, int): return 0 elif isinstance(args, float): return 0 elif isinstance(args, complex): return complex(0) elif isinstance(args, str) or isinstance(args, bytes) or isinstance(args, bytearray): return args elif isinstance(args, object): fnames = list(chain(*map(lambda c: fields(c, True), args.__class__.__mro__))) try: for a in fnames: setattr(args, a, dzeros(getattr(args, a), lev)) except BaseException as ex: # print(ex) pass return args return args
[docs] def unjnd(d): if d: names = list(d.keys()) values = list(d.values()) dd = dict(zip(names[len(names)//2:], values[0:len(names)//2])) d = dict(zip(names[len(names)//2:], values[len(names)//2:])) return dd, d else: return {}, {}
[docs] def joind(ddl, dl): res = {} for dd in ddl: res |= { 'd_' + k: v for k, v in dd.items() } for d in dl: res |= { k: v for k, v in d.items() } return res
[docs] def unzd(d): # print('unzd', d) if d: keys = d.keys() dvals, vals = zip(*d.values()) d_r, r = dict(zip(keys, dvals)), dict(zip(keys, vals)) return d_r, r else: return {}, {}
[docs] class DWith:
[docs] def __init__(self, *args, **kw): self.dobj, self.obj = args[0] super().__init__(*kw)
def __enter__(self, *args, **kw): self.dobj.__enter__(*args, **kw) self.obj.__enter__(*args, **kw) return self.dobj, self.obj def __exit__(self, *args, **kw): self.dobj.__exit__(*args, **kw) self.obj.__exit__(*args, **kw)
[docs] def binop_add(x, y): return x+y
[docs] def binop_sub(x, y): return x-y
[docs] def binop_mult(x, y): return x*y
[docs] def binop_c_mult(x, y): return x*y
[docs] def binop_d_mult(x, y): return x*y
[docs] def binop_matmult(x, y): return x@y
[docs] def binop_div(x, y): return x/y
[docs] def binop_floordiv(x, y): return x//y
[docs] def binop_mod(x, y): return x%y
[docs] def binop_pow(x, y): return x**y
[docs] def unaryop_uadd(x): return +x
[docs] def unaryop_usub(x): return -x
[docs] def augassign_add(x, y): return x+y
[docs] def augassign_sub(x, y): return x-y
[docs] def augassign_mult(x, y): return x*y
[docs] def augassign_div(x, y): return x/y
[docs] def augassign_truediv(x, y): return x//y
[docs] def augassign_mod(x, y): return x%y