(self, fun)
return kwargs_wrapper
:param fun: function accepting D N*-dimensional vectors as keyword arguments (each representing a feature,
            and returns a a matrix of size N* x R and optionally a gradient of size N* x D x R (or N* x D if R == 1)
        :return: a function wrapper which splits a given data matrix into its columns to call fun.
:param fun: function accepting D N*-dimensional vectors as keyword arguments (each representing a feature,
            and returns a a matrix of size N* x R and optionally a gradient of size N* x D x R (or N* x D if R == 1)
        :return: a function wrapper which splits a given data matrix into its columns to call fun.
: param fun : function accepting D N * - dimensional vectors as keyword arguments ( each representing a feature and returns a a matrix of size N * x R and optionally a gradient of size N * x D x R ( or N * x D if R == 1 ) : return : a function wrapper which splits a given data matrix into its columns to call fun .
def __call__(self, fun):
        """
        :param fun: function accepting D N*-dimensional vectors as keyword arguments (each representing a feature,
            and returns a a matrix of size N* x R and optionally a gradient of size N* x D x R (or N* x D if R == 1)
        :return: a function wrapper which splits a given data matrix into its columns to call fun.
        """
        @wraps(fun)
        def kwargs_wrapper(X):
            X = np.atleast_2d(X)
            return fun(**dict(zip(self.labels, X.T)))

        return kwargs_wrapper
def __call__ ( self , fun ) : @ wraps ( fun ) def kwargs_wrapper ( X ) : X = np . atleast_2d ( X ) return fun ( * * dict ( zip ( self . labels , X . T ) ) ) return kwargs_wrapper