class_docstr: Gaussian Kernel Density Estimation.
  
  Args:
      dataset (Tensor | None, optional): Dataset on which to fit the KDE model. Defaults to None.
docstr: Get the KDE estimates from the feature map.
  
  Args:
    features (Tensor): Feature map extracted from the CNN
  
  Returns: KDE Estimates
docstr_tok: ["Get","the","KDE","estimates","from","the","feature","map",".","Args",":","features","(","Tensor",")",":","Feature","map","extracted","from","the","CNN","Returns",":","KDE","Estimates"]
code: def forward(self, features: Tensor) -> Tensor:
      """Get the KDE estimates from the feature map.
  
      Args:
        features (Tensor): Feature map extracted from the CNN
  
      Returns: KDE Estimates
      """
      features = torch.matmul(features, self.bw_transform)
  
      estimate = torch.zeros(features.shape[0]).to(features.device)
      for i in range(features.shape[0]):
          embedding = ((self.dataset - features[i]) ** 2).sum(dim=1)
          embedding = torch.exp(-embedding / 2) * self.norm
          estimate[i] = torch.mean(embedding)
  
      return estimate
  
file_path: anomalib/src/anomalib/models/components/stats/kde.py
imports: from __future__ import annotations
  import math
  import torch
  from torch import Tensor
  from anomalib.models.components.base import DynamicBufferModule
label_desc: Use image node_id 2 for calling the GaussianKDE obj's underlying member method code with example usage: obj.forward(features) and returns: estimate