class_docstr: CI-SDR loss
  
  Reference:
      Convolutive Transfer Function Invariant SDR Training
      Criteria for Multi-Channel Reverberant Speech Separation;
      C. Boeddeker et al., 2021;
      https://arxiv.org/abs/2011.15003
  Args:
      ref: (Batch, samples)
      inf: (Batch, samples)
      filter_length (int): a time-invariant filter that allows
                              slight distortion via filtering
  Returns:
      loss: (Batch,)
class_docstr_tok: ["CI-SDR","loss","Reference",":","Convolutive","Transfer","Function","Invariant","SDR","Training","Criteria","for","Multi-Channel","Reverberant","Speech","Separation",";","C.","Boeddeker","et","al.",",","2021",";","https",":","\/\/arxiv.org\/abs\/2011.15003","Args",":","ref",":","(","Batch",",","samples",")","inf",":","(","Batch",",","samples",")","filter_length","(","int",")",":","a","time-invariant","filter","that","allows","slight","distortion","via","filtering","Returns",":","loss",":","(","Batch",",",")"]
code: def forward(
      self,
      ref: torch.Tensor,
      inf: torch.Tensor,
  ) -> torch.Tensor:
      assert ref.shape == inf.shape, (ref.shape, inf.shape)
  
      return ci_sdr.pt.ci_sdr_loss(
          inf,
          ref,
          compute_permutation=False,
          filter_length=self.filter_length,
      )
  
imports: import logging
  import math
  from abc import ABC
  import ci_sdr
  import fast_bss_eval
  import torch
  from packaging.version import parse
  from torch_complex.tensor import ComplexTensor
  from espnet2.enh.loss.criterions.abs_loss import AbsEnhLoss
  from espnet2.layers.stft import Stft
label_desc: Use image node_id 2 for calling the CISDRLoss obj's underlying member method code with example usage: obj.forward(ref, inf) and returns: ci_sdr