code: def _mutual_info_score_compute(contingency: Tensor) -> Tensor:
      """Compute the mutual information score based on the contingency matrix.
  
      Args:
          contingency: contingency matrix
  
      Returns:
          mutual_info: mutual information score
  
      """
      n = contingency.sum()
      u = contingency.sum(dim=1)
      v = contingency.sum(dim=0)
  
      # Check if preds or target labels only have one cluster
      if u.size() == 1 or v.size() == 1:
          return tensor(0.0)
  
      # Find indices of nonzero values in U and V
      nzu, nzv = torch.nonzero(contingency, as_tuple=True)
      contingency = contingency[nzu, nzv]
  
      # Calculate MI using entries corresponding to nonzero contingency matrix entries
      log_outer = torch.log(u[nzu]) + torch.log(v[nzv])
      mutual_info = (
          contingency
          / n
          * (torch.log(n) + torch.log(contingency) - log_outer)
      )
      return mutual_info.sum()
  
imports: import torch
  from torch import Tensor, tensor
  from torchmetrics.functional.clustering.utils import calculate_contingency_matrix, check_cluster_labels
label_desc: Use image node_id 2 for calling a global function with example usage: _mutual_info_score_compute(contingency) and returns: mutual_info, tensor