§
    @Ä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dS )é    )ÚABCÚabstractmethod)ÚDictÚListN)ÚTensor)Ú	TokenSpanc                   óR   — e Zd Zedee         deee                  fd„¦   «         ZdS )Ú
ITokenizerÚ
transcriptÚreturnc                 ó   — dS )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     úWC:\Projects\Historical\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
   
   sL   € € € € € Øð 4¨¤9ð °°d¸3´i´ð ð ð ñ „^ðð ð r   r
   c                   ó^   — e Zd Zdeeef         fd„Zdee         deee                  fd„ZdS )Ú	TokenizerÚ
dictionaryc                 ó   — || _         d S ©N©r   )r   r   s     r   Ú__init__zTokenizer.__init__   s   € Ø$ˆŒˆˆr   r   r   c                 ó    ‡ — ˆ fd„|D ¦   «         S )Nc                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó*   •— g | ]}‰j         |         ‘ŒS r   r   )Ú.0Úcr   s     €r   ú
<listcomp>z1Tokenizer.__call__.<locals>.<listcomp>.<listcomp>    s    ø€ Ð2Ð2Ð2¨�” Ô#Ð2Ð2Ð2r   r   )r#   Úwordr   s     €r   r%   z&Tokenizer.__call__.<locals>.<listcomp>    s.   ø€ ÐJÐJÐJ°tÐ2Ð2Ð2Ð2¨TÐ2Ñ2Ô2ÐJÐJÐJr   r   r   s   ` r   r   zTokenizer.__call__   s   ø€ ØJÐJÐJÐJ¸zÐJÑJÔJÐJr   N)	r   r   r   r   r   Úintr   r   r   r   r   r   r   r      sm   € € € € € ð% 4¨¨S¨¤>ð %ð %ð %ð %ðK 4¨¤9ð K°°d¸3´i´ð Kð Kð Kð Kð Kð Kr   r   ÚemissionÚtokensÚblankc                 ó  — | j         }|                      d¦  «        } t          j        |gt          j        |¬¦  «        }t          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_tokensr9   #   s{   € ØŒ_€FØ×!Ò! !Ñ$Ô$€HÝŒl˜F˜8­5¬;¸vÐFÑFÔF€Gåœ^¨H°gÀUÐKÑKÔ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dS )ÚIAlignerr(   r)   r   c                 ó   — dS )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   r;   r;   /   sX   € € € € € Øð ð °°d¸3´i´ð ÀTÈ$ÈyÌ/ÔEZð ð ð ñ „^ðð ð r   r;   c                 ó¦   — t          | ¦  «        t          |¦  «        k    sJ ‚d}g }|D ]'}|                     | |||z   …         ¦  «         ||z  }Œ(|S )Nr   )ÚlenÚsumÚappend)Úlist_ÚlengthsÚiÚretÚls        r   Ú
_unflattenrF   ?   sg   € Ýˆu‰:Œ:�˜W™œÒ%Ð%Ð%Ð%Ø	€AØ
€CØð ð ˆØ�
Š
�5˜˜Q ™U˜Ô#Ñ$Ô$Ð$Ø	ˆQ‰ˆˆØ€Jr   c                 ó   — d„ | D ¦   «         S )Nc                 ó   — g | ]	}|D ]}|‘ŒŒ
S r   r   )r#   rA   Úitems      r   r%   z_flatten.<locals>.<listcomp>J   s%   € Ð<Ð<Ð<�U°eÐ<Ð<¨dˆDÐ<Ð<Ð<Ð<r   r   )Únested_lists    r   Ú_flattenrK   I   s   € Ø<Ð<˜kÐ<Ñ<Ô<Ð<r   c                   óX   — e Zd Zd„ Zdedeee                  deee                  fd„ZdS )ÚAlignerc                 ó   — || _         d S r   r.   )r   r*   s     r   r   zAligner.__init__N   s   € ØˆŒ
ˆ
ˆ
r   r(   r)   r   c                 óð   — |j         dk    rt          d|j        › �¦  «        ‚t          |t	          |¦  «        | j        ¦  «        \  }}t          j        ||¦  «        }t          |d„ |D ¦   «         ¦  «        S )Né   z&The input emission must be 2D. Found: c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )r>   )r#   Útss     r   r%   z$Aligner.__call__.<locals>.<listcomp>W   s   € Ð!;Ð!;Ð!;¨b¥# b¡'¤'Ð!;Ð!;Ð!;r   )	ÚndimÚ
ValueErrorÚshaper9   rK   r*   r3   Úmerge_tokensrF   )r   r(   r)   r7   r8   Úspanss         r   r   zAligner.__call__Q   sz   € ØŒ=˜AÒÐÝÐVÀhÄnÐVÐVÑWÔWÐWå!;¸HÅhÈvÑFVÔFVÐX\ÔXbÑ!cÔ!cÑˆ˜Ý”˜~¨vÑ6Ô6ˆÝ˜%Ð!;Ð!;°FÐ!;Ñ!;Ô!;Ñ<Ô<Ð<r   N)	r   r   r   r   r   r   r'   r   r   r   r   r   rM   rM   M   s]   € € € € € ðð ð ð= ð =°°d¸3´i´ð =ÀTÈ$ÈyÌ/ÔEZð =ð =ð =ð =ð =ð =r   rM   )r   )Úabcr   r   Útypingr   r   r0   Útorchaudio.functionalÚ
functionalr3   r   r   r
   r   r'   r9   r;   rF   rK   rM   r   r   r   ú<module>r\      s~  ðØ #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð �ñ ô ð ð"Kð Kð Kð Kð K�
ñ Kô Kð Kð	"ð 	"¨ð 	"¸¸c¼ð 	"È3ð 	"ð 	"ð 	"ð 	"ðð ð ð ð ˆsñ ô ð ð ð ð ð=ð =ð =ð
=ð 
=ð 
=ð 
=ð 
=ˆhñ 
=ô 
=ð 
=ð 
=ð 
=r   