class_docstr: Density estimator for AI-VAD.
  
  Combines density estimators for the different feature types included in the model.
  
  Args:
      use_velocity_features (bool): Flag indicating if velocity features should be used.
      use_pose_features (bool): Flag indicating if pose features should be used.
      use_deep_features (bool): Flag indicating if deep features should be used.
      n_components_velocity (int): Number of components used by GMM density estimation for velocity features.
      n_neighbors_pose (int): Number of neighbors used in KNN density estimation for pose features.
      n_neighbors_deep (int): Number of neighbors used in KNN density estimation for deep features.
docstr: Update the density estimators for the different feature types.
  
  Args:
      features (dict[FeatureType, Tensor]): Dictionary containing extracted features for a single frame.
      group (str): Identifier of the video from which the frame was sampled. Used for grouped density estimation.
code: def update(
      self, features: dict[FeatureType, Tensor], group: Any = None
  ) -> None:
      """Update the density estimators for the different feature types.
  
      Args:
          features (dict[FeatureType, Tensor]): Dictionary containing extracted features for a single frame.
          group (str): Identifier of the video from which the frame was sampled. Used for grouped density estimation.
      """
      if self.use_velocity_features:
          self.velocity_estimator.update(features[FeatureType.VELOCITY])
      if self.use_deep_features:
          self.appearance_estimator.update(
              features[FeatureType.DEEP], group=group
          )
      if self.use_pose_features:
          self.pose_estimator.update(
              features[FeatureType.POSE], group=group
          )
  
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from typing import Any
  import torch
  from sklearn.mixture import GaussianMixture
  from torch import Tensor, nn
  from anomalib.models.ai_vad.features import FeatureType
  from anomalib.utils.metrics.min_max import MinMax
label_desc: Use image node_id 2 for calling the CombinedDensityEstimator obj's underlying member method code with example usage: obj.update(features, group) without return types