def __init__(self, func, ins=None, outdtype=None, altreduce=None):
if isinstance(func, numpy.ufunc):<EOL><INDENT>self.ufunc = func<EOL>self.nin = func.nin<EOL>self.ins = (<NUM_LIT:0>, <NUM_LIT:1>, <NUM_LIT:2>, <NUM_LIT:3>)[:func.nin]<EOL>self.nout = func.nout<EOL>self.outdtype = None<EOL>self.altreduce = None<EOL><DEDENT>else:<EOL><INDENT>self.ufunc = func<EOL>self.nin = len(ins)<EOL>self.ins = ins<EOL>self.nout = <NUM_LIT:1><EOL>self.outdtype = outdtype<EOL>self.altreduce = altreduce<EOL><DEDENT>self.__doc__ = func.__doc__<EOL>if self.nout != <NUM_LIT:1>:<EOL><INDENT>raise TypeError("<STR_LIT>")<EOL><DEDENT>
if func is not ufunc, a bit complicated:
            ins tells which positional argument will be striped
            after done, reducefunc is called on the results