class_docstr: Permutation Invariant Training (PIT) module.
  
  :parameter int num_spkrs: number of speakers for PIT process (2 or 3)
class_docstr_tok: ["Permutation","Invariant","Training","(","PIT",")","module",".",":","parameter","int","num_spkrs",":","number","of","speakers","for","PIT","process","(","2","or","3",")"]
docstr: Get permutations with DFS.
  
     The final result is all permutations of the 'source' sequence.
     e.g. [[1, 2], [2, 1]] or
          [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
  
  :param np.ndarray source: (num_spkrs, 1), e.g. [1, 2, ..., N]
  :param int start: the start point to permute
docstr_tok: ["Get","permutations","with","DFS",".","The","final","result","is","all","permutations","of","the","'source","'","sequence",".","e.g",".","[","[","1",",","2","]",",","[","2",",","1","]","]","or","[","[","1",",","2",",","3","]",",","[","1",",","3",",","2","]",",","[","2",",","1",",","3","]",",","[","2",",","3",",","1","]",",","[","3",",","2",",","1","]",",","[","3",",","1",",","2","]","]",":","param","np.ndarray","source",":","(","num_spkrs",",","1",")",",","e.g",".","[","1",",","2",",","...",",","N","]",":","param","int","start",":","the","start","point","to","permute"]
code: def permutationDFS(self, source, start):
      """Get permutations with DFS.
  
         The final result is all permutations of the 'source' sequence.
         e.g. [[1, 2], [2, 1]] or
              [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
  
      :param np.ndarray source: (num_spkrs, 1), e.g. [1, 2, ..., N]
      :param int start: the start point to permute
  
      """
      if start == len(source) - 1:  # reach final state
          self.perm_choices.append(source.tolist())
      for i in range(start, len(source)):
          # swap values at position start and i
          source[start], source[i] = source[i], source[start]
          self.permutationDFS(source, start + 1)
          # reverse the swap
          source[start], source[i] = source[i], source[start]
  
imports: import argparse
  import logging
  import math
  import os
  import sys
  from itertools import groupby
  import numpy
  import torch
  from espnet.nets.asr_interface import ASRInterface
  from espnet.nets.e2e_asr_common import get_vgg2l_odim, label_smoothing_dist
  from espnet.nets.pytorch_backend.ctc import ctc_for
  from espnet.nets.pytorch_backend.e2e_asr import E2E
  from espnet.nets.pytorch_backend.e2e_asr import Reporter
  from espnet.nets.pytorch_backend.frontends.feature_transform import feature_transform_for
  from espnet.nets.pytorch_backend.frontends.frontend import frontend_for
  from espnet.nets.pytorch_backend.initialization import lecun_normal_init_parameters, set_forget_bias_to_one
  from espnet.nets.pytorch_backend.nets_utils import get_subsample, make_pad_mask, pad_list, to_device, to_torch_tensor
  from espnet.nets.pytorch_backend.rnn.attentions import att_for
  from espnet.nets.pytorch_backend.rnn.decoders import decoder_for
  from espnet.nets.pytorch_backend.rnn.encoders import RNNP, VGG2L
  from espnet.nets.pytorch_backend.rnn.encoders import encoder_for
label_desc: Use image node_id 4 for calling the PIT obj's underlying member method code with example usage: obj.permutationDFS(source, start) without return types