diff --git a/visualizer/visualizer.py b/visualizer/visualizer.py index b7bef8c..d0e6cca 100644 --- a/visualizer/visualizer.py +++ b/visualizer/visualizer.py @@ -4,22 +4,22 @@ class get_local(object): cache = {} is_activate = False - def __init__(self, varname): - self.varname = varname + def __init__(self, varnames): + self.varnames = [varnames] if isinstance(varnames, str) else varnames def __call__(self, func): if not type(self).is_activate: return func - type(self).cache[func.__qualname__] = [] + for varname in self.varnames: + type(self).cache[func.__qualname__+'.'+varname] = [] c = Bytecode.from_code(func.__code__) extra_code = [ Instr('STORE_FAST', '_res'), - Instr('LOAD_FAST', self.varname), - Instr('STORE_FAST', '_value'), + *sum([[Instr('LOAD_FAST', varname), Instr('STORE_FAST', f'_value_{varname}')] for varname in self.varnames], []), Instr('LOAD_FAST', '_res'), - Instr('LOAD_FAST', '_value'), - Instr('BUILD_TUPLE', 2), + *[Instr('LOAD_FAST', f'_value_{varname}') for varname in self.varnames], + Instr('BUILD_TUPLE', 1+len(self.varnames)), Instr('STORE_FAST', '_result_tuple'), Instr('LOAD_FAST', '_result_tuple'), ] @@ -27,8 +27,10 @@ def __call__(self, func): func.__code__ = c.to_code() def wrapper(*args, **kwargs): - res, values = func(*args, **kwargs) - type(self).cache[func.__qualname__].append(values.detach().cpu().numpy()) + res_values = func(*args, **kwargs) + res, values = res_values[0], res_values[1:] + for i,varname in enumerate(self.varnames): + type(self).cache[func.__qualname__+'.'+varname].append(values[i].detach().cpu()) return res return wrapper