Apply a function on the wrapped tensor. The tensor
        will be the second argument of func.

        This is because many symbolic functions
        (such as tensorpack's layers) takes 'scope' as the first argument.

        Returns:
            LinearWrap: ``LinearWrap(func(args[0], self.tensor(), *args[1:], **kwargs))``.

def apply2(self, func, *args, **kwargs):
        """
        Apply a function on the wrapped tensor. The tensor
        will be the second argument of func.

        This is because many symbolic functions
        (such as tensorpack's layers) takes 'scope' as the first argument.

        Returns:
            LinearWrap: ``LinearWrap(func(args[0], self.tensor(), *args[1:], **kwargs))``.
        """
        ret = func(args[0], self._t, *(args[1:]), **kwargs)
        return LinearWrap(ret)