Ë
    P/æj•
  ã                   óÐ   — 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     úi/root/repos/pocs/video-evals/.venv/lib/python3.12/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ð °°d¸3±i±ò ó ñ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__   s-   € Ø?I×J°t¨TÖ2¨�—‘ Ó#Ô2Ó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°°d¸3±i±ô 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Ü�l‰l˜F˜8¬5¯;©;¸vÔF€GäŸ^™^¨H°gÀUÔKÑ€N�Fà�Z‰Z‹\€FØ+¨AÑ.°°q±	�F€NØ˜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:   „ Øð ð °°d¸3±i±ð À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   ?   sX   € Üˆ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"   € Ø)×<�U°eÒ<¨dŠDÐ<ˆDÓ<Ð<ùÓ<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   st   € Ø�=‰=˜AÒÜÐEÀhÇnÁnÐEUÐVÓWÐWä!;¸HÄhÈvÓFVÐX\×XbÑXbÓ!cÑˆ˜Ü—‘˜~¨vÓ6ˆÜ˜%°FÖ!;¨b¤# b¥'Ò!;Ó<Ð<ùÒ!;s   Á+B
N)	r   r   r   r   r   r   r"   r   r   r   r   r   rG   rG   M   s2   „ òð= ð =°°d¸3±i±ð =À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   