def fit_transform(self, X, y=None) -> Tensor:
        """
        Learns the t-stochastic neighbor embedding of the given data.

        :param X: ndarray or torch tensor (n_samples, *)
        :param y: ignored
        :return: ndarray (n_samples, n_components)
        """
        with torch.no_grad():
            return _tsne(
                X,
                no_dims=self.n_components,
                initial_dims=self.initial_dims,
                perplexity=self.perplexity,
                verbose=self.verbose,
                max_iter=self.n_iter,
                device=self.device,
            )

        Learns the t-stochastic neighbor embedding of the given data.

        :param X: ndarray or torch tensor (n_samples, *)
        :param y: ignored
        :return: ndarray (n_samples, n_components)
        
smoe/utils/visualization/tsne_torch_model.py