
    Ph
                         d dl mZmZ d dlmZmZ d dlZd dlmZ	 d dlm
Z
 d dlmZ  G d de      Z G d d	e      Zdd
e
dee   defdZ G d de      Zd Zd Z G d de      Zy)    )ABCabstractmethod)DictListN)Tensor)	TokenSpanc                   8    e Zd Zedee   deee      fd       Zy)
ITokenizer
transcriptreturnc                      y)a  Tokenize the given transcript (list of word)

        .. note::

           The toranscript must be normalized.

        Args:
            transcript (list of str): Transcript (list of word).

        Returns:
            (list of int): List of token sequences
        N )selfr   s     qC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchaudio/pipelines/_wav2vec2/aligner.py__call__zITokenizer.__call__           N)__name__
__module____qualname__r   r   strr   r   r   r   r
   r
   
   s.    49 d3i  r   r
   c                   D    e Zd Zdeeef   fdZdee   deee      fdZy)	Tokenizer
dictionaryc                     || _         y Nr   )r   r   s     r   __init__zTokenizer.__init__   s	    $r   r   r   c           	      r    |D cg c]  }|D cg c]  }| j                   |    c}! c}}S c c}w c c}}w r   r   )r   r   wordcs       r   r   zTokenizer.__call__   s5    ?IJztT2T#T2zJJ2Js   	3.33N)	r   r   r   r   r   intr   r   r   r   r   r   r   r      s8    %4S> %K49 Kd3i Kr   r   emissiontokensblankc                     | j                   }| j                  d      } t        j                  |gt        j                  |      }t        j                  | ||      \  }}|j                         }|d   |d   }}||fS )Nr   )dtypedevicer%   )r(   	unsqueezetorchtensorint32Fforced_alignexp)r#   r$   r%   r(   targetsaligned_tokensscoress          r   _align_emission_and_tokensr4   #   sr    __F!!!$HllF85;;vFG^^HgUKNFZZ\F+A.q	FN6!!r   c            	       B    e Zd Zededeee      deee      fd       Zy)IAlignerr#   r$   r   c                      y)a  Generate list of time-stamped token sequences

        Args:
            emission (Tensor): Sequence of token probability distributions in log-domain.
                Shape: `(time, tokens)`.
            tokens (list of integer sequence): Tokenized transcript.
                Output from :py:class:`torchaudio.pipelines.Wav2Vec2FABundle.Tokenizer`.

        Returns:
            (list of TokenSpan sequence): Tokens with time stamps and scores.
        Nr   )r   r#   r$   s      r   r   zIAligner.__call__0   r   r   N)	r   r   r   r   r   r   r"   r   r   r   r   r   r6   r6   /   s:     d3i T$y/EZ  r   r6   c                     t        |       t        |      k(  sJ d}g }|D ]  }|j                  | |||z           ||z  }  |S )Nr   )lensumappend)list_lengthsiretls        r   
_unflattenrA   ?   sS    u:W%%%	A
C

5QU#$	Q  Jr   c                 @    | D cg c]  }|D ]  }|  c}}S c c}}w r   r   )nested_listr<   items      r   _flattenrE   I   s"    )<kUedDeDk<<<s   c                   >    e Zd Zd Zdedeee      deee      fdZy)Alignerc                     || _         y r   r)   )r   r%   s     r   r   zAligner.__init__N   s	    
r   r#   r$   r   c           	         |j                   dk7  rt        d|j                         t        |t	        |      | j
                        \  }}t        j                  ||      }t        ||D cg c]  }t        |       c}      S c c}w )N   z&The input emission must be 2D. Found: )
ndim
ValueErrorshaper4   rE   r%   r.   merge_tokensrA   r9   )r   r#   r$   r2   r3   spanstss          r   r   zAligner.__call__Q   sx    ==AEhnnEUVWW!;HhvFVX\XbXb!c~v6%F!;Fb#b'F!;<<!;s   +B
N)	r   r   r   r   r   r   r"   r   r   r   r   r   rG   rG   M   s2    = =d3i =T$y/EZ =r   rG   )r   )abcr   r   typingr   r   r+   torchaudio.functional
functionalr.   r   r   r
   r   r"   r4   r6   rA   rE   rG   r   r   r   <module>rU      sq    #   !  + "K
 K	" 	"c 	"3 	"s  =
=h 
=r   