def decorator(caller, _func=None):
if _func is not None:  <EOL><INDENT>return decorate(_func, caller)<EOL><DEDENT>if inspect.isclass(caller):<EOL><INDENT>name = caller.__name__.lower()<EOL>callerfunc = get_init(caller)<EOL>doc = '<STR_LIT>''<STR_LIT>' % (caller.__name__, caller.__name__)<EOL>fun = getfullargspec(callerfunc).args[<NUM_LIT:1>]  <EOL><DEDENT>elif inspect.isfunction(caller):<EOL><INDENT>if caller.__name__ == '<STR_LIT>':<EOL><INDENT>name = '<STR_LIT>'<EOL><DEDENT>else:<EOL><INDENT>name = caller.__name__<EOL><DEDENT>callerfunc = caller<EOL>doc = caller.__doc__<EOL>fun = getfullargspec(callerfunc).args[<NUM_LIT:0>]  <EOL><DEDENT>else:  <EOL><INDENT>name = caller.__class__.__name__.lower()<EOL>callerfunc = caller.__call__.__func__<EOL>doc = caller.__call__.__doc__<EOL>fun = getfullargspec(callerfunc).args[<NUM_LIT:1>]  <EOL><DEDENT>evaldict = callerfunc.__globals__.copy()<EOL>evaldict['<STR_LIT>'] = caller<EOL>evaldict['<STR_LIT>'] = decorate<EOL>return FunctionMaker.create(<EOL>'<STR_LIT>' % (name, fun),<EOL>'<STR_LIT>' % fun,<EOL>evaldict, call=caller, doc=doc, module=caller.__module__,<EOL>__wrapped__=caller)<EOL>
decorator(caller) converts a caller function into a decorator