class_docstr: A utility class to help extract subsequences out of a batch
  of sequences
  
  Arguments
  ---------
  word_separator: int
      the index of the word separator (used in p_seq)
  word_separator_base int
      the index of word separators used in unprocessed
      targets (if different)
  
  Example
  -------
  >>> import torch
  >>> from speechbrain.lobes.models.g2p.homograph import SubsequenceExtractor
  >>> extractor = SubsequenceExtractor()
  >>> phns = torch.Tensor(
  ...     [[1, 2, 0, 1, 3, 0, 2, 1, 0],
  ...      [2, 1, 3, 0, 1, 2, 0, 3, 2]]
  ... )
  >>> phn_lens = torch.IntTensor([8, 9])
  >>> subsequence_phn_start = torch.IntTensor([3, 4])
  >>> subsequence_phn_end = torch.IntTensor([5, 7])
  >>> p_seq = torch.Tensor([
  ...     [[0., 1., 0., 0.],
  ...      [0., 0., 1., 0.],
  ...      [1., 0., 0., 0.],
  ...      [0., 1., 0., 0.],
  ...      [0., 0., 0., 1.],
  ...      [1., 0., 0., 0.],
  ...      [0., 0., 1., 0.],
  ...      [0., 1., 0., 0.],
  ...      [1., 0., 0., 0.]],
  ...     [[0., 0., 1., 0.],
  ...      [0., 1., 0., 0.],
  ...      [0., 0., 0., 1.],
  ...      [1., 0., 0., 0.],
  ...      [0., 1., 0., 0.],
  ...      [0., 0., 1., 0.],
  ...      [1., 0., 0., 0.],
  ...      [0., 0., 0., 1.],
  ...      [0., 0., 1., 0.]]
  ... ])
  >>> extractor.extract_seq(
  ...    phns,
  ...    phn_lens,
  ...    p_seq,
  ...    subsequence_phn_start,
  ...    subsequence_phn_end
  ... )
  (tensor([[[0., 1., 0., 0.],
           [0., 0., 0., 1.],
           [0., 0., 0., 0.]],
  <BLANKLINE>
          [[0., 1., 0., 0.],
           [0., 0., 1., 0.],
           [0., 0., 0., 0.]]]), tensor([[1., 3., 0.],
          [1., 2., 0.]]), tensor([0.6667, 1.0000]))
docstr: A helper method to calculate start or end positions corresponding
  to specific words
  
  Arguments
  ---------
  index_match: torch.Tensor
      a mask where positions matching the word index are
      indicated as a 1 and the remaining positions are 0
  
  words_range: torch.Tensor
      a range tensor over the tokens
  aggregation: callable
      the aggregation to use (torch.min or torch.max)
  no_match_value: int
      the value to output if no match is found (this could
      happen when searching in model outputs rather than
      in source data)
docstr_tok: ["A","helper","method","to","calculate","start","or","end","positions","corresponding","to","specific","words","Arguments","--","--","--","--","-","index_match",":","torch.Tensor","a","mask","where","positions","matching","the","word","index","are","indicated","as","a","1","and","the","remaining","positions","are","0","words_range",":","torch.Tensor","a","range","tensor","over","the","tokens","aggregation",":","callable","the","aggregation","to","use","(","torch.min","or","torch.max",")","no_match_value",":","int","the","value","to","output","if","no","match","is","found","(","this","could","happen","when","searching","in","model","outputs","rather","than","in","source","data",")"]
code: def _get_positions(
      self, index_match, words_range, aggregation, no_match_value
  ):
      """A helper method to calculate start or end positions corresponding
      to specific words
  
      Arguments
      ---------
      index_match: torch.Tensor
          a mask where positions matching the word index are
          indicated as a 1 and the remaining positions are 0
  
      words_range: torch.Tensor
          a range tensor over the tokens
      aggregation: callable
          the aggregation to use (torch.min or torch.max)
      no_match_value: int
          the value to output if no match is found (this could
          happen when searching in model outputs rather than
          in source data)
  
      """
      positions = torch.where(index_match, words_range, no_match_value)
      positions = aggregation(positions, dim=-1).values
      return torch.where(positions == 0, 0, positions + 1)
  
imports: import torch
  from torch import nn
label_desc: Use image node_id 9 for calling the SubsequenceExtractor obj's underlying member method code with example usage: obj._get_positions(index_match, words_range, aggregation, no_match_value) and returns: torch