class_docstr: A class that enables online (streaming) clustering based diarization.
  
  - The instance created from `OnlineClusteringDiarizer` sets aside a certain amount of memory
    to provide the upcoming inference with history information
  
  - There are two major modules involved: `OnlineSegmentor` and `OnlineSpeakerClustering`.
      OnlineSegmentor: Take the VAD-timestamps and generate segments for each scale
      OnlineSpeakerClustering: Update the entire speaker labels of the given online session
                               while updating the speaker labels of the streaming inputs.
  
  - The overall diarization process is done by calling `diarize_step` function.
    `diarize_step` function goes through the following steps:
      (1) Segmentation (`OnlineSegmentor` class)
      (2) Embedding extraction (`_extract_online_embeddings` function call)
      (3) Online speaker counting and speaker clustering (`OnlineClusteringDiarizer` class)
      (4) Label generation (`generate_cluster_labels` function call)
docstr: Launch online clustering for `uniq_embs_and_timestamps` input variable.
  
  Args:
      uniq_embs_and_timestamps (dict):
          Dictionary containing embeddings, timestamps and multiscale weights.
          If uniq_embs_and_timestamps contains only one scale, single scale diarization
          is performed.
      cuda (bool):
          Boolean indicator for cuda usages
docstr_tok: ["Launch","online","clustering","for","`","uniq_embs_and_timestamps","`","input","variable",".","Args",":","uniq_embs_and_timestamps","(","dict",")",":","Dictionary","containing","embeddings",",","timestamps","and","multiscale","weights",".","If","uniq_embs_and_timestamps","contains","only","one","scale",",","single","scale","diarization","is","performed",".","cuda","(","bool",")",":","Boolean","indicator","for","cuda","usages"]
code: def _perform_online_clustering(
      self,
      uniq_embs_and_timestamps: Dict[str, torch.Tensor],
      cuda=False,
  ) -> torch.Tensor:
      """
      Launch online clustering for `uniq_embs_and_timestamps` input variable.
  
      Args:
          uniq_embs_and_timestamps (dict):
              Dictionary containing embeddings, timestamps and multiscale weights.
              If uniq_embs_and_timestamps contains only one scale, single scale diarization
              is performed.
          cuda (bool):
              Boolean indicator for cuda usages
      """
      device = torch.device("cuda") if cuda else torch.device("cpu")
  
      # Get base-scale (the highest index) information from uniq_embs_and_timestamps.
      embeddings_in_scales, timestamps_in_scales = split_input_data(
          embeddings_in_scales=uniq_embs_and_timestamps["embeddings"],
          timestamps_in_scales=uniq_embs_and_timestamps["timestamps"],
          multiscale_segment_counts=uniq_embs_and_timestamps[
              "multiscale_segment_counts"
          ],
      )
  
      curr_emb, self.scale_mapping_dict = get_scale_interpolated_embs(
          multiscale_weights=uniq_embs_and_timestamps[
              "multiscale_weights"
          ],
          embeddings_in_scales=embeddings_in_scales,
          timestamps_in_scales=timestamps_in_scales,
          device=device,
      )
  
      base_segment_indexes = torch.tensor(
          self.segment_indexes[self.base_scale_index]
      ).to(curr_emb.device)
      merged_clus_labels = self.online_clus.forward_infer(
          curr_emb=curr_emb,
          base_segment_indexes=base_segment_indexes,
          frame_index=self.frame_index,
          cuda=cuda,
      )
      # Update history data
      for scale_idx, (window, shift) in self.multiscale_args_dict[
          "scale_dict"
      ].items():
          cluster_label_hyp = self.save_history_data(
              scale_idx, merged_clus_labels, self.online_clus.is_online
          )
  
      return cluster_label_hyp
  
imports: import os
  import time
  from copy import deepcopy
  from typing import Dict
  import torch
  from omegaconf import DictConfig
  from nemo.collections.asr.models import ClusteringDiarizer
  from nemo.collections.asr.parts.utils.offline_clustering import get_scale_interpolated_embs, split_input_data
  from nemo.collections.asr.parts.utils.online_clustering import OnlineSpeakerClustering
  from nemo.collections.asr.parts.utils.speaker_utils import OnlineSegmentor, audio_rttm_map, generate_cluster_labels, get_embs_and_timestamps
  from nemo.utils import logging, model_utils
label_desc: Use image node_id 15 for calling the OnlineClusteringDiarizer obj's underlying member method code with example usage: obj._perform_online_clustering(uniq_embs_and_timestamps, cuda) and returns: cluster_label_hyp