class_docstr: Model Gaussian distribution over a set of points.
class_docstr_tok: ["Model","Gaussian","distribution","over","a","set","of","points","."]
docstr: Compute the NLL (negative log likelihood) scores.
  
  Args:
      features (Tensor): semantic features on which density modeling is performed.
  
  Returns:
      nll (Tensor): Torch tensor of scores
docstr_tok: ["Compute","the","NLL","(","negative","log","likelihood",")","scores",".","Args",":","features","(","Tensor",")",":","semantic","features","on","which","density","modeling","is","performed",".","Returns",":","nll","(","Tensor",")",":","Torch","tensor","of","scores"]
code: def score_samples(self, features: Tensor) -> Tensor:
      """Compute the NLL (negative log likelihood) scores.
  
      Args:
          features (Tensor): semantic features on which density modeling is performed.
  
      Returns:
          nll (Tensor): Torch tensor of scores
      """
      features_transformed = torch.matmul(
          features - self.mean_vec, self.u_mat / self.sigma_mat
      )
      nll = torch.sum(
          features_transformed * features_transformed, dim=1
      ) + 2 * torch.sum(torch.log(self.sigma_mat))
      return nll
  
file_path: anomalib/src/anomalib/models/dfm/torch_model.py
imports: from __future__ import annotations
  import math
  import torch
  import torch.nn.functional
  from torch import Tensor, nn
  from anomalib.models.components import PCA, DynamicBufferModule, FeatureExtractor
label_desc: Use image node_id 3 for calling the SingleClassGaussian obj's underlying member method code with example usage: obj.score_samples(features) and returns: nll