class_docstr: Takes an initial labeling and uses a mixture of Gaussians to approximate each classes
  distribution in the feature space. Each unlabeled element is then assigned a probability
  of belonging to each class based on it's fit to each classes approximated distribution.
  
  See:
      https://en.wikipedia.org/wiki/Mixture_model
docstr: Args:
      channel_count: The number of features per element.
      mixture_count: The number of class distributions.
      mixture_size: The number Gaussian components per class distribution.
      verbose_build: If ``True``, turns on verbose logging of load steps.
code: def __init__(
      self,
      channel_count: int,
      mixture_count: int,
      mixture_size: int,
      verbose_build: bool = False,
  ):
      """
      Args:
          channel_count: The number of features per element.
          mixture_count: The number of class distributions.
          mixture_size: The number Gaussian components per class distribution.
          verbose_build: If ``True``, turns on verbose logging of load steps.
      """
      if not torch.cuda.is_available():
          raise NotImplementedError(
              "GaussianMixtureModel is currently implemented for CUDA."
          )
      self.channel_count = channel_count
      self.mixture_count = mixture_count
      self.mixture_size = mixture_size
      self.compiled_extension = load_module(
          "gmm",
          {
              "CHANNEL_COUNT": channel_count,
              "MIXTURE_COUNT": mixture_count,
              "MIXTURE_SIZE": mixture_size,
          },
          verbose_build=verbose_build,
      )
      self.params, self.scratch = self.compiled_extension.init()
  
file_path: MONAI/monai/networks/layers/gmm.py
imports: from __future__ import annotations
  import torch
  from monai._extensions.loader import load_module
label_desc: Use image node_id 1 to create a new GaussianMixtureModel object  with example: obj = GaussianMixtureModel(channel_count, mixture_count, mixture_size, verbose_build)