def __getitem__()

in models/feat_pool.py [0:0]


    def __getitem__(self, index):
        if not self.ready() or False:  #  and (self.class_ptr == 0).any()
            no = self.class_num * self.ID_points_num * self.pick_nums
            return torch.randn((no, self.feat_dim)).to(self.device), torch.full((no, ), -1).to(self.device), 
        
        ood_samples, ood_labels = [], []

        if self.mode == 'VOS':
            ood_samples, ood_labels = [], []
            mean_embed_id = self.queue.mean(dim=1, keepdim=True)  # shape(nc,1,ndim)
            X = (self.queue - mean_embed_id).view(-1, self.feat_dim)  # shape(nc*ns,dim)
            covariance = (X.T @ X) / len(X) * 10. + .1
            # covariance += 0.0001 * torch.eye(len(covariance), device=X.device)
            covariance += 1.1 * torch.eye(len(covariance), device=X.device)

            new_dis = MultivariateNormal(torch.zeros(self.feat_dim).cuda(), covariance_matrix=covariance)
            negative_samples = new_dis.rsample((self.sample_from,)) * 2
            prob_density = new_dis.log_prob(negative_samples)
            cur_samples, index_prob = torch.topk(- prob_density, self.select)
            negative_samples = negative_samples[index_prob]

            for ci, miu in enumerate(mean_embed_id):
                rand_ind = torch.randperm(self.select)[:self.pick_nums]
                ood_samples.append(miu + negative_samples[rand_ind])
                ood_labels.extend([ci] * self.pick_nums)

        elif self.mode == 'NPOS':
            mean_embed_id = self.queue.mean(dim=1, keepdim=True)  # shape(nc,1,ndim)
            X = (self.queue - mean_embed_id).view(-1, self.feat_dim)  # shape(nc*ns,dim)
            covariance = (X.T @ X) / len(X) * 10 + .1
            # covariance += 0.0001 * torch.eye(len(covariance), device=X.device)
            covariance += 1.1 * torch.eye(len(covariance), device=X.device)
            # covariance = torch.eye(self.feat_dim).to(self.queue.device)
            
            self.new_dis = MultivariateNormal(torch.zeros(self.feat_dim).to(self.queue.device), 
                                              covariance)
            
            negative_samples = self.new_dis.rsample((self.sample_from,)).to(self.device) * 2

            ood_samples, ood_labels = generate_outliers(self.queue, input_index=self.KNN_index, negative_samples=negative_samples, 
                                                        ID_points_num=self.ID_points_num, K=self.K, select=self.select, 
                                                        sampling_ratio=1.0, pic_nums=self.pick_nums, depth=self.feat_dim,
                                                        cov_mat=1.)
        
        ood_samples = torch.cat(ood_samples).to(self.device)
        ood_labels = torch.tensor(ood_labels).to(self.device)

        return ood_samples, ood_labels