def gradify_closure(func, argmaps, func_kwargs={}): func_kwargs = dict(func_kwargs) def gradify_func(*args): kwargs = {} for (arg, argmap) in zip(args, argmaps): postprocessing = argmap.get("postprocessing", None) if postprocessing: arg = eval(postprocessing)(arg) kw_label = argmap["label"] kwargs[kw_label] = arg return func(**kwargs, **func_kwargs) return gradify_func def compile_callable(source, target_name=None): ldict = {} exec(source, globals(), ldict) if target_name: return ldict[target_name] else: for v in ldict.values(): if callable(v): return v