class_docstr: Applies utterance-level speaker permutation
  
  Computes the maxium possible value of the given utility function
  over the permutations of the speakers.
  
  Args:
      utility_func (function):
          Function that computes the utility (opposite of loss) with signature of
          (extimate: torch.Tensor, reference: torch.Tensor) -> torch.Tensor
          where input Tensors are shape of [batch, speakers, frame] and
          the output Tensor is shape of [batch, speakers].
  
  References:
      - Multi-talker Speech Separation with Utterance-level Permutation Invariant Training of
        Deep Recurrent Neural Networks
        Morten Kolbæk, Dong Yu, Zheng-Hua Tan and Jesper Jensen
        https://arxiv.org/abs/1703.06284
code: def __init__(self, utility_func):
      super().__init__()
      self.utility_func = utility_func
  
file_path: audio/examples/source_separation/utils/metrics.py
imports: import math
  from itertools import permutations
  from typing import Optional
  import torch
label_desc: Use image node_id 1 to create a new PIT object from inherited base classes: torch.nn with example: obj = PIT(utility_func)