def METHOD_NAME(self, Xs, Xt):
    '''
    Transform Xs and Xt
    :param Xs: ns * n_feature, source feature
    :param Xt: nt * n_feature, target feature
    :return: Xs_new and Xt_new after TCA
    '''
    X = np.hstack((Xs.T, Xt.T))
    X /= np.linalg.norm(X, axis=0)
    m, n = X.shape
    ns, nt = len(Xs), len(Xt)
    e = np.vstack((1 / ns * np.ones((ns, 1)), -1 / nt * np.ones((nt, 1))))
    M = e * e.T
    M = M / np.linalg.norm(M, 'fro')
    H = np.eye(n) - 1 / n * np.ones((n, n))
    K = kernel(self.kernel_type, X, None, gamma=self.gamma)
    n_eye = m if self.kernel_type == 'primal' else n
    a, b = K @ M @ K.T + self.lamb * np.eye(n_eye), K @ H @ K.T
    w, V = scipy.linalg.eig(a, b)
    ind = np.argsort(w)
    A = V[:, ind[:self.dim]]
    Z = A.T @ K
    Z /= np.linalg.norm(Z, axis=0)
    Xs_new, Xt_new = Z[:, :ns].T, Z[:, ns:].T
    return Xs_new, Xt_new