class_docstr: TCNDenseNet block from iNeuBe
  
  Reference:
  Lu, Y. J., Cornell, S., Chang, X., Zhang, W., Li, C., Ni, Z., ... & Watanabe, S.
  Towards Low-Distortion Multi-Channel Speech Enhancement:
  The ESPNET-Se Submission to the L3DAS22 Challenge. ICASSP 2022 p. 9201-9205.
  
  Args:
      n_spk: number of output sources/speakers.
      in_freqs: number of complex STFT frequencies.
      mic_channels: number of microphones channels
          (only fixed-array geometry supported).
      hid_chans: number of channels in the subsampling/upsampling conv layers.
      hid_chans_dense: number of channels in the densenet layers
          (reduce this to reduce VRAM requirements).
      ksz_dense: kernel size in the densenet layers thorough iNeuBe.
      ksz_tcn: kernel size in the TCN submodule.
      tcn_repeats: number of repetitions of blocks in the TCN submodule.
      tcn_blocks: number of blocks in the TCN submodule.
      tcn_channels: number of channels in the TCN submodule.
      activation: activation function to use in the whole iNeuBe model,
          you can use any torch supported activation e.g. 'relu' or 'elu'.
code: def _get_depth(self, num_freq):
      n_layers = 0
      freqs = []
      while num_freq > 15:
          num_freq = int(num_freq / 2)
          freqs.append(num_freq)
          n_layers += 1
      return freqs
  
imports: import torch
  from packaging.version import parse
  from torch_complex.tensor import ComplexTensor
  from espnet2.torch_utils.get_layer_from_string import get_layer
label_desc: Use image node_id 2 for calling the TCNDenseUNet obj's underlying member method code with example usage: obj._get_depth(num_freq) and returns: freqs