§
    ‚Štjê  ã                   óf  — d dl Z d dlmZ d dlmZ d dlZd dlZd dlm	Z	 d dlm
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZmZ ddl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+  e)j,        e-¦  «        Z. e(d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z/ G d„ de	j0        ¦  «        Z1 G d„ de	j0        ¦  «        Z2 G d„ de¦  «        Z3 G d„ de¦  «        Z4 G d„ d e¦  «        Z5 G d!„ d"e	j0        ¦  «        Z6 G d#„ d$e	j0        ¦  «        Z7	 	 dTd&e	j0        d'ej8        d(ej8        d)ej8        d*ej8        dz  d+e9dz  d,e9d-e%e'         fd.„Z: G d/„ d0e	j0        ¦  «        Z; G d1„ d2e	j0        ¦  «        Z< G d3„ d4e¦  «        Z= G d5„ d6e	j0        ¦  «        Z> G d7„ d8e	j0        ¦  «        Z? G d9„ d:e¦  «        Z@ G d;„ d<e	j0        ¦  «        ZA G d=„ d>e	j0        ¦  «        ZBe( G d?„ d@e"¦  «        ¦   «         ZC	 	 dUdAeDeEeEf         dBe9dCeEd*ejF        dz  dDeEdEejG        fdF„ZHeZIe( G dG„ dHeC¦  «        ¦   «         ZJ e(dI¬¦  «         G dJ„ dKeC¦  «        ¦   «         ZKdLZL e(dM¬¦  «         G dN„ dOeC¦  «        ¦   «         ZM e(dP¬¦  «         G dQ„ dReC¦  «        ¦   «         ZNg dS¢ZOdS )Vé    N)ÚCallable)Ú	dataclass)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úis_deepspeed_zero3_enabled)Úis_fsdp_managed_module)Úcreate_bidirectional_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚCausalLMOutputÚModelOutputÚSequenceClassifierOutputÚWav2Vec2BaseModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModelÚ*get_torch_context_manager_or_global_device)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚloggingé   )ÚUniSpeechConfigzh
    Output type of [`UniSpeechForPreTrainingOutput`], with potential hidden states and attentions.
    )Úcustom_introc                   óà   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dS )	ÚUniSpeechForPreTrainingOutputaÝ  
    loss (*optional*, returned when model is in train mode, `torch.FloatTensor` of shape `(1,)`):
        Total loss as the sum of the contrastive loss (L_m) and the diversity loss (L_d) as stated in the [official
        paper](https://huggingface.co/papers/2006.11477).
    projected_states (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.proj_codevector_dim)`):
        Hidden-states of the model projected to *config.proj_codevector_dim* that can be used to predict the masked
        projected quantized states.
    projected_quantized_states (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.proj_codevector_dim)`):
        Quantized extracted feature vectors projected to *config.proj_codevector_dim* representing the positive
        target vectors for contrastive loss.
    codevector_perplexity (`torch.FloatTensor` of shape `(1,)`):
        The perplexity of the codevector distribution, used to measure the diversity of the codebook.
    NÚlossÚprojected_statesÚprojected_quantized_statesÚcodevector_perplexityÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r    r!   r"   r#   Útupler$   © ó    ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/unispeech/modeling_unispeech.pyr   r   5   s»   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø;?Ð Ô 1°DÑ 8Ð?Ð?Ñ?Ø6:Ð˜5Ô,¨tÑ3Ð:Ð:Ñ:Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r.   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚUniSpeechSamePadLayerc                 ól   •— t          ¦   «                              ¦   «          |dz  dk    rdnd| _        d S )Né   r   r   )ÚsuperÚ__init__Únum_pad_remove)ÚselfÚnum_conv_pos_embeddingsÚ	__class__s     €r/   r5   zUniSpeechSamePadLayer.__init__S   s:   ø€ Ý‰Œ×ÒÑÔÐØ#:¸QÑ#>À!Ò#CÐ#C˜a˜aÈˆÔÐÐr.   c                 óJ   — | j         dk    r|d d …d d …d | j          …f         }|S ©Nr   )r6   ©r7   r#   s     r/   ÚforwardzUniSpeechSamePadLayer.forwardW   s;   € ØÔ Ò"Ð"Ø)¨!¨!¨!¨Q¨Q¨QÐ0F°4Ô3FÐ2FÐ0FÐ*FÔGˆMØÐr.   ©r%   r&   r'   r5   r=   Ú__classcell__©r9   s   @r/   r1   r1   R   sL   ø€ € € € € ðKð Kð Kð Kð Kðð ð ð ð ð ð r.   r1   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú UniSpeechPositionalConvEmbeddingc                 óÊ  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        |j        dz  |j        ¬¦  «        | _        t          j        j	        }t          t          j        j        d¦  «        rt          j        j        j	        }t          ¦   «         rëdd l}|j                             | j        j        d¬¦  «        5   || j        dd¬¦  «        | _        d d d ¦  «         n# 1 swxY w Y   t          | j        d¦  «        r-| j        j        j        j        }| j        j        j        j        }n| j        j        }| j        j        }|j                             | |¦  «         |j                             | |¦  «         n || j        dd¬¦  «        | _        t-          |j        ¦  «        | _        t0          |j                 | _        d S )	Nr3   )Úkernel_sizeÚpaddingÚgroupsÚweight_normr   )Úmodifier_rankÚweight)ÚnameÚdimÚparametrizations)r4   r5   ÚnnÚConv1dÚhidden_sizer8   Únum_conv_pos_embedding_groupsÚconvÚutilsrG   ÚhasattrrL   r	   Ú	deepspeedÚzeroÚGatheredParametersrI   Ú	original0Ú	original1Úweight_gÚweight_vÚregister_external_parameterr1   rE   r   Úfeat_extract_activationÚ
activation)r7   ÚconfigrG   rT   rY   rZ   r9   s         €r/   r5   z)UniSpeechPositionalConvEmbedding.__init__^   sþ  ø€ Ý‰Œ×ÒÑÔÐÝ”IØÔØÔØÔ6ØÔ2°aÑ7ØÔ7ð
ñ 
ô 
ˆŒ	õ ”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKå%Ñ'Ô'ð 	EØÐÐÐà”×2Ò2°4´9Ô3CÐSTÐ2ÑUÔUð Ið IØ'˜K¨¬	¸ÀaÐHÑHÔH�”	ðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Iå�t”yÐ"4Ñ5Ô5ð .Øœ9Ô5Ô<ÔF�Øœ9Ô5Ô<ÔF��àœ9Ô-�Øœ9Ô-�ØŒN×6Ò6°t¸XÑFÔFÐFØŒN×6Ò6°t¸XÑFÔFÐFÐFà#˜ D¤I°HÀ!ÐDÑDÔDˆDŒIå,¨VÔ-KÑLÔLˆŒÝ  Ô!?Ô@ˆŒˆˆs   ÃC?Ã?DÄDc                 óÜ   — |                      dd¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      dd¦  «        }|S )Nr   r3   )Ú	transposerQ   rE   r]   r<   s     r/   r=   z(UniSpeechPositionalConvEmbedding.forward   se   € Ø%×/Ò/°°1Ñ5Ô5ˆàŸ	š	 -Ñ0Ô0ˆØŸš ]Ñ3Ô3ˆØŸš¨Ñ6Ô6ˆà%×/Ò/°°1Ñ5Ô5ˆØÐr.   r>   r@   s   @r/   rB   rB   ]   sM   ø€ € € € € ðAð Að Að Að AðBð ð ð ð ð ð r.   rB   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚUniSpeechNoLayerNormConvLayerr   c                 óZ  •— t          ¦   «                              ¦   «          |dk    r|j        |dz
           nd| _        |j        |         | _        t          j        | j        | j        |j        |         |j        |         |j	        ¬¦  «        | _
        t          |j                 | _        d S )Nr   r   ©rD   ÚstrideÚbias)r4   r5   Úconv_dimÚin_conv_dimÚout_conv_dimrM   rN   Úconv_kernelÚconv_strideÚ	conv_biasrQ   r   r\   r]   ©r7   r^   Úlayer_idr9   s      €r/   r5   z&UniSpeechNoLayerNormConvLayer.__init__‹   s�   ø€ Ý‰Œ×ÒÑÔÐØ<DÀqºL¸L˜6œ?¨8°a©<Ô8Ð8ÈaˆÔØ"œO¨HÔ5ˆÔå”IØÔØÔØÔ*¨8Ô4ØÔ% hÔ/ØÔ!ð
ñ 
ô 
ˆŒ	õ ! Ô!?Ô@ˆŒˆˆr.   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S ©N)rQ   r]   r<   s     r/   r=   z%UniSpeechNoLayerNormConvLayer.forward™   s*   € ØŸ	š	 -Ñ0Ô0ˆØŸš¨Ñ6Ô6ˆØÐr.   ©r   r>   r@   s   @r/   rb   rb   Š   sR   ø€ € € € € ðAð Að Að Að Að Aðð ð ð ð ð ð r.   rb   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚUniSpeechLayerNormConvLayerr   c                 óš  •— t          ¦   «                              ¦   «          |dk    r|j        |dz
           nd| _        |j        |         | _        t          j        | j        | j        |j        |         |j        |         |j	        ¬¦  «        | _
        t          j        | j        d¬¦  «        | _        t          |j                 | _        d S )Nr   r   rd   T)Úelementwise_affine)r4   r5   rg   rh   ri   rM   rN   rj   rk   rl   rQ   Ú	LayerNormÚ
layer_normr   r\   r]   rm   s      €r/   r5   z$UniSpeechLayerNormConvLayer.__init__    s¶   ø€ Ý‰Œ×ÒÑÔÐØ<DÀqºL¸L˜6œ?¨8°a©<Ô8Ð8ÈaˆÔØ"œO¨HÔ5ˆÔå”IØÔØÔØÔ*¨8Ô4ØÔ% hÔ/ØÔ!ð
ñ 
ô 
ˆŒ	õ œ, tÔ'8ÈTÐRÑRÔRˆŒÝ  Ô!?Ô@ˆŒˆˆr.   c                 óÜ   — |                       |¦  «        }|                     dd¦  «        }|                      |¦  «        }|                     dd¦  «        }|                      |¦  «        }|S )Néþÿÿÿéÿÿÿÿ)rQ   r`   rw   r]   r<   s     r/   r=   z#UniSpeechLayerNormConvLayer.forward¯   se   € ØŸ	š	 -Ñ0Ô0ˆà%×/Ò/°°BÑ7Ô7ˆØŸš¨Ñ6Ô6ˆØ%×/Ò/°°BÑ7Ô7ˆàŸš¨Ñ6Ô6ˆØÐr.   rq   r>   r@   s   @r/   rs   rs   Ÿ   sR   ø€ € € € € ðAð Að Að Að Að Aðð ð ð ð ð ð r.   rs   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚUniSpeechGroupNormConvLayerr   c                 ó¦  •— t          ¦   «                              ¦   «          |dk    r|j        |dz
           nd| _        |j        |         | _        t          j        | j        | j        |j        |         |j        |         |j	        ¬¦  «        | _
        t          |j                 | _        t          j        | j        | j        d¬¦  «        | _        d S )Nr   r   rd   T)Ú
num_groupsÚnum_channelsÚaffine)r4   r5   rg   rh   ri   rM   rN   rj   rk   rl   rQ   r   r\   r]   Ú	GroupNormrw   rm   s      €r/   r5   z$UniSpeechGroupNormConvLayer.__init__»   s½   ø€ Ý‰Œ×ÒÑÔÐØ<DÀqºL¸L˜6œ?¨8°a©<Ô8Ð8ÈaˆÔØ"œO¨HÔ5ˆÔå”IØÔØÔØÔ*¨8Ô4ØÔ% hÔ/ØÔ!ð
ñ 
ô 
ˆŒ	õ ! Ô!?Ô@ˆŒåœ,°$Ô2CÐRVÔRcÐlpÐqÑqÔqˆŒˆˆr.   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rp   )rQ   rw   r]   r<   s     r/   r=   z#UniSpeechGroupNormConvLayer.forwardË   s;   € ØŸ	š	 -Ñ0Ô0ˆØŸš¨Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐr.   rq   r>   r@   s   @r/   r|   r|   º   sR   ø€ € € € € ðrð rð rð rð rð rð ð ð ð ð ð ð r.   r|   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚUniSpeechFeatureEncoderz.Construct the features from raw audio waveformc                 ó¤  •‡— t          ¦   «                              ¦   «          ‰j        dk    r7t          ‰d¬¦  «        gˆfd„t	          ‰j        dz
  ¦  «        D ¦   «         z   }nD‰j        dk    r!ˆfd„t	          ‰j        ¦  «        D ¦   «         }nt          d‰j        › d	�¦  «        ‚t          j        |¦  «        | _	        d
| _
        d| _        d S )NÚgroupr   ©rn   c                 ó8   •— g | ]}t          ‰|d z   ¬¦  «        ‘ŒS )r   r‡   )rb   ©Ú.0Úir^   s     €r/   ú
<listcomp>z4UniSpeechFeatureEncoder.__init__.<locals>.<listcomp>Ù   s@   ø€ ð Oð Oð Oàõ .¨f¸qÀ1¹uÐEÑEÔEðOð Oð Or.   r   Úlayerc                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS )r‡   )rs   r‰   s     €r/   rŒ   z4UniSpeechFeatureEncoder.__init__.<locals>.<listcomp>Þ   s4   ø€ ð ð ð ØDEÕ+¨F¸QÐ?Ñ?Ô?ðð ð r.   z`config.feat_extract_norm` is z), but has to be one of ['group', 'layer']FT)r4   r5   Úfeat_extract_normr|   ÚrangeÚnum_feat_extract_layersÚ
ValueErrorrM   Ú
ModuleListÚconv_layersÚgradient_checkpointingÚ_requires_grad)r7   r^   r”   r9   s    ` €r/   r5   z UniSpeechFeatureEncoder.__init__Õ   s  øø€ Ý‰Œ×ÒÑÔÐàÔ# wÒ.Ð.Ý6°vÈÐJÑJÔJÐKð Oð Oð Oð Oå˜vÔ=ÀÑAÑBÔBðOñ Oô Oñ ˆKˆKð Ô%¨Ò0Ð0ðð ð ð ÝINÈvÔOmÑInÔInðñ ô ˆKˆKõ Øt°Ô1IÐtÐtÐtñô ð õ œ=¨Ñ5Ô5ˆÔØ&+ˆÔ#Ø"ˆÔÐÐr.   c                 óP   — |                       ¦   «         D ]	}d|_        Œ
d| _        d S ©NF)Ú
parametersÚrequires_gradr–   ©r7   Úparams     r/   Ú_freeze_parametersz*UniSpeechFeatureEncoder._freeze_parametersé   s4   € Ø—_’_Ñ&Ô&ð 	(ð 	(ˆEØ"'ˆEÔÐØ#ˆÔÐÐr.   c                 ór   — |d d …d f         }| j         r| j        rd|_        | j        D ]} ||¦  «        }Œ|S )NT)r–   Útrainingrš   r”   )r7   Úinput_valuesr#   Ú
conv_layers       r/   r=   zUniSpeechFeatureEncoder.forwardî   s[   € Ø$ Q Q Q¨ WÔ-ˆð Ôð 	/ 4¤=ð 	/Ø*.ˆMÔ'àÔ*ð 	6ð 	6ˆJØ&˜J }Ñ5Ô5ˆMˆMàÐr.   )r%   r&   r'   r(   r5   r�   r=   r?   r@   s   @r/   r„   r„   Ò   s\   ø€ € € € € Ø8Ð8ð#ð #ð #ð #ð #ð($ð $ð $ð

ð 
ð 
ð 
ð 
ð 
ð 
r.   r„   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚUniSpeechFeatureProjectionc                 ó.  •— t          ¦   «                              ¦   «          t          j        |j        d         |j        ¬¦  «        | _        t          j        |j        d         |j        ¦  «        | _	        t          j
        |j        ¦  «        | _        d S )Nrz   ©Úeps)r4   r5   rM   rv   rg   Úlayer_norm_epsrw   ÚLinearrO   Ú
projectionÚDropoutÚfeat_proj_dropoutÚdropout©r7   r^   r9   s     €r/   r5   z#UniSpeechFeatureProjection.__init__ü   sn   ø€ Ý‰Œ×ÒÑÔÐÝœ, v¤°rÔ':ÀÔ@UÐVÑVÔVˆŒÝœ) F¤O°BÔ$7¸Ô9KÑLÔLˆŒÝ”z &Ô":Ñ;Ô;ˆŒˆˆr.   c                 óˆ   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }||fS rp   )rw   r©   r¬   )r7   r#   Únorm_hidden_statess      r/   r=   z"UniSpeechFeatureProjection.forward  sC   € à!Ÿ_š_¨]Ñ;Ô;ÐØŸšÐ(:Ñ;Ô;ˆØŸš ]Ñ3Ô3ˆØÐ0Ð0Ð0r.   r>   r@   s   @r/   r£   r£   û   sG   ø€ € € € € ð<ð <ð <ð <ð <ð1ð 1ð 1ð 1ð 1ð 1ð 1r.   r£   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr¬   Úkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nrz   ç      à¿r3   r   ©rK   )ÚprŸ   r   )
Úsizer)   Úmatmulr`   rM   Ú
functionalÚsoftmaxr¬   rŸ   Ú
contiguous)
r±   r²   r³   r´   rµ   r¶   r¬   r·   Úattn_weightsÚattn_outputs
             r/   Úeager_attention_forwardrÃ   
  sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r.   c                   óþ   ‡ — e Zd ZdZ	 	 	 	 	 ddededed	ed
edededz  fˆ fd„Z	 	 	 dde	j
        de	j
        dz  de	j
        dz  dedz  dee         dee	j
        e	j
        dz  ee	j
                 dz  f         fd„Zˆ xZS )ÚUniSpeechAttentionz=Multi-headed attention from 'Attention Is All You Need' paperr°   FTNÚ	embed_dimÚ	num_headsr¬   Ú
is_decoderrf   Ú	is_causalr^   c                 ó
  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        || _        | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚| j        dz  | _        || _	        || _
        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).r¹   )rf   )r4   r5   rÆ   rÇ   r¬   Úhead_dimr^   r’   r¶   rÈ   rÉ   rM   r¨   Úk_projÚv_projÚq_projÚout_proj)	r7   rÆ   rÇ   r¬   rÈ   rf   rÉ   r^   r9   s	           €r/   r5   zUniSpeechAttention.__init__)  s  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒØ$ˆŒØ"ˆŒå”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝœ	 )¨Y¸TÐBÑBÔBˆŒˆˆr.   r#   Úkey_value_statesrµ   Úoutput_attentionsr·   Úreturnc                 óú  — |du}|j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }	|r|n|}
g |
j         dd…         ¢d‘| j        ‘R }|                      |
¦  «                             |¦  «                             dd¦  «        }|                      |
¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        } || |	|||f| j        sdn| j        | j        |dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||dfS )z#Input shape: Batch x Time x ChannelNrz   r   r3   r°   )r¬   r¶   rÑ   )ÚshaperË   rÎ   Úviewr`   rÌ   rÍ   r   Úget_interfacer^   Ú_attn_implementationrÃ   rŸ   r¬   r¶   ÚreshaperÀ   rÏ   )r7   r#   rÐ   rµ   rÑ   r·   Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesÚcurrent_statesÚkv_shapeÚ
key_statesÚvalue_statesÚattention_interfacerÂ   rÁ   s                    r/   r=   zUniSpeechAttention.forwardH  s½  € ð .°TÐ9Ðð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆð —{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆà-?ÐRÐ)Ð)À]ˆØB�^Ô)¨#¨2¨#Ô.ÐB°ÐB°D´MÐBÐBˆØ—[’[ Ñ0Ô0×5Ò5°hÑ?Ô?×IÒIÈ!ÈQÑOÔOˆ
Ø—{’{ >Ñ2Ô2×7Ò7¸ÑAÔA×KÒKÈAÈqÑQÔQˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð  $œ}Ð>�C�C°$´,Ø”LØ/ð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜L¨$Ð.Ð.r.   )r°   FTFN)NNF)r%   r&   r'   r(   ÚintÚfloatÚboolr   r5   r)   ÚTensorr   r   r,   r=   r?   r@   s   @r/   rÅ   rÅ   &  sJ  ø€ € € € € ØGÐGð Ø ØØØ)-ðCð CàðCð ðCð ð	Cð
 ðCð ðCð ðCð   $Ñ&ðCð Cð Cð Cð Cð CðD 15Ø.2Ø).ð0/ð 0/à”|ð0/ð  œ,¨Ñ-ð0/ð œ tÑ+ð	0/ð
   $™;ð0/ð Ð-Ô.ð0/ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð0/ð 0/ð 0/ð 0/ð 0/ð 0/ð 0/ð 0/r.   rÅ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚUniSpeechFeedForwardc                 óÌ  •— t          ¦   «                              ¦   «          t          j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _	        t          |j        t          ¦  «        rt          |j                 | _        n|j        | _        t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        d S rp   )r4   r5   rM   rª   Úactivation_dropoutÚintermediate_dropoutr¨   rO   Úintermediate_sizeÚintermediate_denseÚ
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnÚoutput_denseÚhidden_dropoutÚoutput_dropoutr­   s     €r/   r5   zUniSpeechFeedForward.__init__|  s°   ø€ Ý‰Œ×ÒÑÔÐÝ$&¤J¨vÔ/HÑ$IÔ$IˆÔ!å"$¤)¨FÔ,>ÀÔ@XÑ"YÔ"YˆÔÝ�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$à'-Ô'8ˆDÔ$åœI fÔ&>ÀÔ@RÑSÔSˆÔÝ œj¨Ô)>Ñ?Ô?ˆÔÐÐr.   c                 óØ   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rp   )rì   rð   rê   rñ   ró   r<   s     r/   r=   zUniSpeechFeedForward.forward‰  sg   € Ø×/Ò/°Ñ>Ô>ˆØ×0Ò0°Ñ?Ô?ˆØ×1Ò1°-Ñ@Ô@ˆà×)Ò)¨-Ñ8Ô8ˆØ×+Ò+¨MÑ:Ô:ˆØÐr.   r>   r@   s   @r/   rç   rç   {  sL   ø€ € € € € ð@ð @ð @ð @ð @ðð ð ð ð ð ð r.   rç   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚUniSpeechEncoderLayerc                 ó�  •— t          ¦   «                              ¦   «          t          |j        |j        |j        d|¬¦  «        | _        t          j        |j	        ¦  «        | _
        t          j        |j        |j        ¬¦  «        | _        t          |¦  «        | _        t          j        |j        |j        ¬¦  «        | _        d S )NF©rÆ   rÇ   r¬   rÈ   r^   r¥   )r4   r5   rÅ   rO   Únum_attention_headsÚattention_dropoutÚ	attentionrM   rª   rò   r¬   rv   r§   rw   rç   Úfeed_forwardÚfinal_layer_normr­   s     €r/   r5   zUniSpeechEncoderLayer.__init__”  s¬   ø€ Ý‰Œ×ÒÑÔÐÝ+ØÔ(ØÔ0ØÔ,ØØð
ñ 
ô 
ˆŒõ ”z &Ô"7Ñ8Ô8ˆŒÝœ, vÔ'9¸vÔ?TÐUÑUÔUˆŒÝ0°Ñ8Ô8ˆÔÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÐÐr.   NFc                 ó  — |}|                       |||¬¦  «        \  }}}|                      |¦  «        }||z   }|                      |¦  «        }||                      |¦  «        z   }|                      |¦  «        }|f}|r||fz  }|S ©N©rµ   rÑ   )rû   r¬   rw   rü   rý   ©r7   r#   rµ   rÑ   Úattn_residualrÁ   Ú_Úoutputss           r/   r=   zUniSpeechEncoderLayer.forward£  s¨   € Ø%ˆØ)-¯ªØ¨.ÐL]ð *8ñ *
ô *
Ñ&ˆ�| Qð Ÿš ]Ñ3Ô3ˆØ%¨Ñ5ˆàŸš¨Ñ6Ô6ˆØ%¨×(9Ò(9¸-Ñ(HÔ(HÑHˆØ×-Ò-¨mÑ<Ô<ˆà Ð"ˆàð 	'Ø˜�Ñ&ˆGàˆr.   r˜   r>   r@   s   @r/   rö   rö   “  sQ   ø€ € € € € ð\ð \ð \ð \ð \ðð ð ð ð ð ð ð r.   rö   c                   ó^   ‡ — e Zd Zˆ fd„Z	 	 	 	 ddej        dej        dz  deded	ef
d
„Zˆ xZ	S )ÚUniSpeechEncoderc                 ó‚  •‡— t          ¦   «                              ¦   «          ‰| _        t          ‰¦  «        | _        t          j        ‰j        ‰j        ¬¦  «        | _	        t          j
        ‰j        ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nr¥   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r-   )rö   ©rŠ   r  r^   s     €r/   rŒ   z-UniSpeechEncoder.__init__.<locals>.<listcomp>¾  s"   ø€ Ð$lÐ$lÐ$lÀqÕ%:¸6Ñ%BÔ%BÐ$lÐ$lÐ$lr.   F©r4   r5   r^   rB   Úpos_conv_embedrM   rv   rO   r§   rw   rª   rò   r¬   r“   r�   Únum_hidden_layersÚlayersr•   r­   s    `€r/   r5   zUniSpeechEncoder.__init__¸  s¡   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ>¸vÑFÔFˆÔÝœ, vÔ'9¸vÔ?TÐUÑUÔUˆŒÝ”z &Ô"7Ñ8Ô8ˆŒÝ”mÐ$lÐ$lÐ$lÐ$lÍEÐRXÔRjÑLkÔLkÐ$lÑ$lÔ$lÑmÔmˆŒØ&+ˆÔ#Ð#Ð#r.   NFTr#   rµ   rÑ   Úoutput_hidden_statesÚreturn_dictc                 óö  — |rdnd }|rdnd }|�;|                      d¦  «                             dd|j        d         ¦  «        }d|| <   t          | j        ||¬¦  «        }|                      |¦  «        }	||	                     |j        ¦  «        z   }|                      |¦  «        }|  	                    |¦  «        }t          ¦   «         pt          | ¦  «        }
| j        D ]a}|r||fz   }t          j        g ¦  «        }| j        o|| j        j        k     }|r|
r ||||¬¦  «        }|d         }|rd}|r||d         fz   }Œb|r||fz   }|st#          d	„ |||fD ¦   «         ¦  «        S t%          |||¬
¦  «        S )Nr-   rz   r   r3   r   ©r^   Úinputs_embedsrµ   r   ©NNc              3   ó   K  — | ]}|®|V — Œ	d S rp   r-   ©rŠ   Úvs     r/   ú	<genexpr>z+UniSpeechEncoder.forward.<locals>.<genexpr>÷  ó(   è è € ÐmÐm˜qÐ_`Ð_l˜Ð_lÐ_lÐ_lÐ_lÐmÐmr.   ©Úlast_hidden_stater#   r$   )Ú	unsqueezeÚrepeatrÔ   r   r^   r  ÚtoÚdevicerw   r¬   r	   r
   r  r)   ÚrandrŸ   Ú	layerdropr,   r   ©r7   r#   rµ   rÑ   r  r  Úall_hidden_statesÚall_self_attentionsÚexpand_attention_maskÚposition_embeddingsÚsynced_gpusr�   Údropout_probabilityÚskip_the_layerÚlayer_outputss                  r/   r=   zUniSpeechEncoder.forwardÁ  s  € ð #7Ð@˜B˜B¸DÐØ$5Ð?˜b˜b¸4ÐàÐ%à$2×$<Ò$<¸RÑ$@Ô$@×$GÒ$GÈÈ1ÈmÔNaÐbcÔNdÑ$eÔ$eÐ!Ø45ˆMÐ0Ð0Ñ1å2Ø”;Ø'Ø)ð
ñ 
ô 
ˆð #×1Ò1°-Ñ@Ô@ÐØ%Ð(;×(>Ò(>¸}Ô?SÑ(TÔ(TÑTˆØŸš¨Ñ6Ô6ˆØŸš ]Ñ3Ô3ˆå0Ñ2Ô2ÐRÕ6LÈTÑ6RÔ6Rˆà”[ð 	Pð 	PˆEØ#ð IØ$5¸Ð8HÑ$HÐ!õ #(¤*¨R¡.¤.Ðà!œ]ÐZÐ/BÀTÄ[ÔEZÒ/ZˆNØ!ð 1 [ð 1à % Ø!°.ÐTeð!ñ !ô !�ð !.¨aÔ 0�àð -Ø ,�à ð PØ&9¸]È1Ô=MÐ<OÑ&OÐ#øàð 	EØ 1°]Ð4DÑ DÐàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmÝØ+Ø+Ø*ð
ñ 
ô 
ð 	
r.   ©NFFT)
r%   r&   r'   r5   r)   Útensorrå   rä   r=   r?   r@   s   @r/   r  r  ·  s˜   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð /3Ø"'Ø%*Ø ð;
ð ;
à”|ð;
ð œ tÑ+ð;
ð  ð	;
ð
 #ð;
ð ð;
ð ;
ð ;
ð ;
ð ;
ð ;
ð ;
ð ;
r.   r  c                   ó4   ‡ — e Zd Zˆ fd„Zdej        fd„Zˆ xZS )ÚUniSpeechAttnAdapterLayerc                 ót  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          j        | j        ¦  «        | _        t          j	        | j        | j        ¦  «        | _
        t          j        ¦   «         | _        t          j	        | j        | j        ¦  «        | _        dS )zŸ
        Implements adapter modules directly with 3D tensor weight as parameters and without using ModuleList to speed
        up training throughput.
        N)r4   r5   Úadapter_attn_dimÚ	input_dimrO   Ú
hidden_dimrM   rv   Únormr¨   Úlinear_1ÚReLUÚact_fnÚlinear_2r­   s     €r/   r5   z"UniSpeechAttnAdapterLayer.__init__   s�   ø€ õ
 	‰Œ×ÒÑÔÐØÔ0ˆŒØ Ô,ˆŒå”L ¤Ñ1Ô1ˆŒ	Ýœ	 $¤/°4´>ÑBÔBˆŒÝ”g‘i”iˆŒÝœ	 $¤.°$´/ÑBÔBˆŒˆˆr.   r#   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rp   )r2  r3  r5  r6  r<   s     r/   r=   z!UniSpeechAttnAdapterLayer.forward  sL   € ØŸ	š	 -Ñ0Ô0ˆàŸš mÑ4Ô4ˆØŸš MÑ2Ô2ˆØŸš mÑ4Ô4ˆàÐr.   )r%   r&   r'   r5   r)   r*   r=   r?   r@   s   @r/   r-  r-  ÿ  s[   ø€ € € € € ðCð Cð Cð Cð Cð UÔ%6ð ð ð ð ð ð ð ð r.   r-  c                   óR   ‡ — e Zd Zˆ fd„Z	 	 ddej        dej        dz  defd„Zˆ xZS )	Ú$UniSpeechEncoderLayerStableLayerNormc                 óì  •— t          ¦   «                              ¦   «          t          |j        |j        |j        d|¬¦  «        | _        t          j        |j	        ¦  «        | _
        t          j        |j        |j        ¬¦  «        | _        t          |¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t#          |dd ¦  «        �t%          |¦  «        | _        d S d | _        d S )NFrø   r¥   r/  )r4   r5   rÅ   rO   rù   rú   rû   rM   rª   rò   r¬   rv   r§   rw   rç   rü   rý   Úgetattrr-  Úadapter_layerr­   s     €r/   r5   z-UniSpeechEncoderLayerStableLayerNorm.__init__  sÝ   ø€ Ý‰Œ×ÒÑÔÐÝ+ØÔ(ØÔ0ØÔ,ØØð
ñ 
ô 
ˆŒõ ”z &Ô"7Ñ8Ô8ˆŒÝœ, vÔ'9¸vÔ?TÐUÑUÔUˆŒÝ0°Ñ8Ô8ˆÔÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔå�6Ð-¨tÑ4Ô4Ð@Ý!:¸6Ñ!BÔ!BˆDÔÐÐà!%ˆDÔÐÐr.   NFr#   rµ   rÑ   c                 óJ  — |}|                       |¦  «        }|                      |||¬¦  «        \  }}}|                      |¦  «        }||z   }||                      |                      |¦  «        ¦  «        z   }| j        �||                      |¦  «        z   }|f}|r||fz  }|S rÿ   )rw   rû   r¬   rü   rý   r<  r  s           r/   r=   z,UniSpeechEncoderLayerStableLayerNorm.forward,  sÇ   € ð &ˆØŸš¨Ñ6Ô6ˆØ)-¯ªØ¨.ÐL]ð *8ñ *
ô *
Ñ&ˆ�| Qð Ÿš ]Ñ3Ô3ˆØ%¨Ñ5ˆØ%¨×(9Ò(9¸$×:OÒ:OÐP]Ñ:^Ô:^Ñ(_Ô(_Ñ_ˆàÔÐ)Ø)¨D×,>Ò,>¸}Ñ,MÔ,MÑMˆMà Ð"ˆàð 	'Ø˜�Ñ&ˆGàˆr.   r˜   )	r%   r&   r'   r5   r)   rå   rä   r=   r?   r@   s   @r/   r9  r9    s~   ø€ € € € € ð&ð &ð &ð &ð &ð, /3Ø"'ð	ð à”|ðð œ tÑ+ðð  ð	ð ð ð ð ð ð ð r.   r9  c                   ó.   ‡ — e Zd Zˆ fd„Z	 	 	 	 dd„Zˆ xZS )ÚUniSpeechEncoderStableLayerNormc                 ó‚  •‡— t          ¦   «                              ¦   «          ‰| _        t          ‰¦  «        | _        t          j        ‰j        ‰j        ¬¦  «        | _	        t          j
        ‰j        ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nr¥   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r-   )r9  r	  s     €r/   rŒ   z<UniSpeechEncoderStableLayerNorm.__init__.<locals>.<listcomp>N  s"   ø€ ÐcÐcÐc¸aÕ1°&Ñ9Ô9ÐcÐcÐcr.   Fr
  r­   s    `€r/   r5   z(UniSpeechEncoderStableLayerNorm.__init__G  s¦   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ>¸vÑFÔFˆÔÝœ, vÔ'9¸vÔ?TÐUÑUÔUˆŒÝ”z &Ô"7Ñ8Ô8ˆŒÝ”mØcÐcÐcÐcÅ5ÈÔIaÑCbÔCbÐcÑcÔcñ
ô 
ˆŒð ',ˆÔ#Ð#Ð#r.   NFTc                 óÆ  — |rdnd }|rdnd }|�;|                      d¦  «                             dd|j        d         ¦  «        }d|| <   t          | j        ||¬¦  «        }|                      |¦  «        }	||	z   }|                      |¦  «        }t          ¦   «         pt          | ¦  «        }
| j	        D ]a}|r||fz   }t          j        g ¦  «        }| j        o|| j        j        k     }|r|
r ||||¬¦  «        }|d         }|rd}|r||d         fz   }Œb|                      |¦  «        }|r||fz   }|st          d	„ |||fD ¦   «         ¦  «        S t!          |||¬
¦  «        S )Nr-   rz   r   r3   r   r  r   r  c              3   ó   K  — | ]}|®|V — Œ	d S rp   r-   r  s     r/   r  z:UniSpeechEncoderStableLayerNorm.forward.<locals>.<genexpr>Š  r  r.   r  )r  r  rÔ   r   r^   r  r¬   r	   r
   r  r)   r  rŸ   r   rw   r,   r   r!  s                  r/   r=   z'UniSpeechEncoderStableLayerNorm.forwardR  sü  € ð #7Ð@˜B˜B¸DÐØ$5Ð?˜b˜b¸4ÐàÐ%à$2×$<Ò$<¸RÑ$@Ô$@×$GÒ$GÈÈ1ÈmÔNaÐbcÔNdÑ$eÔ$eÐ!Ø45ˆMÐ0Ð0Ñ1å2Ø”;Ø'Ø)ð
ñ 
ô 
ˆð #×1Ò1°-Ñ@Ô@ÐØ%Ð(;Ñ;ˆØŸš ]Ñ3Ô3ˆå0Ñ2Ô2ÐRÕ6LÈTÑ6RÔ6Rˆà”[ð 	Pð 	PˆEØ#ð IØ$5¸Ð8HÑ$HÐ!õ #(¤*¨R¡.¤.Ðà!œ]ÐZÐ/BÀTÄ[ÔEZÒ/ZˆNØ!ð 1 [ð 1ð !& Ø!°.ÐTeð!ñ !ô !�ð !.¨aÔ 0�àð -Ø ,�à ð PØ&9¸]È1Ô=MÐ<OÑ&OÐ#øàŸš¨Ñ6Ô6ˆàð 	EØ 1°]Ð4DÑ DÐàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmÝØ+Ø+Ø*ð
ñ 
ô 
ð 	
r.   r*  r>   r@   s   @r/   r?  r?  F  sZ   ø€ € € € € ð	,ð 	,ð 	,ð 	,ð 	,ð ØØ"Øð=
ð =
ð =
ð =
ð =
ð =
ð =
ð =
r.   r?  c                   ó>   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zd„ Zˆ xZS )ÚUniSpeechGumbelVectorQuantizerz±
    Vector quantization using gumbel softmax. See `[CATEGORICAL REPARAMETERIZATION WITH
    GUMBEL-SOFTMAX](https://huggingface.co/papers/1611.01144) for more information.
    c                 óÞ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | j        z  dk    r t          d|j        › d| j        › d�¦  «        ‚t          j	        t          j        d| j        | j        z  |j        | j        z  ¦  «        ¦  «        | _        t          j        |j        d         | j        | j        z  ¦  «        | _        d| _        d S )Nr   z`config.codevector_dim z5 must be divisible by `config.num_codevector_groups` z for concatenationr   rz   r3   )r4   r5   Únum_codevector_groupsr~   Únum_codevectors_per_groupÚnum_varsÚcodevector_dimr’   rM   Ú	Parameterr)   r*   Úcodevectorsr¨   rg   Úweight_projÚtemperaturer­   s     €r/   r5   z'UniSpeechGumbelVectorQuantizer.__init__˜  sõ   ø€ Ý‰Œ×ÒÑÔÐØ Ô6ˆŒØÔ8ˆŒàÔ  4¤?Ñ2°aÒ7Ð7ÝðY¨&Ô*?ð Yð YØ59´_ðYð Yð Yñô ð õ œ<ÝÔ˜a ¤°4´=Ñ!@À&ÔBWÐ[_Ô[jÑBjÑkÔkñ
ô 
ˆÔõ œ9 V¤_°RÔ%8¸$¼/ÈDÌMÑ:YÑZÔZˆÔð ˆÔÐÐr.   c                 óÎ   — |                       d¬¦  «        }t          j        t          j        t          j        ||¦  «        d¬¦  «         ¦  «                             ¦   «         }|S )Nr   rº   rz   )Úmeanr)   ÚexpÚsumÚxlogy)ÚprobsÚmarginal_probsÚ
perplexitys      r/   Ú_compute_perplexityz2UniSpeechGumbelVectorQuantizer._compute_perplexity¬  sU   € àŸš¨˜Ñ*Ô*ˆÝ”Y¥¤	­%¬+°nÀnÑ*UÔ*UÐ[]Ð ^Ñ ^Ô ^Ð^Ñ_Ô_×cÒcÑeÔeˆ
ØÐr.   c                 óö  — |j         \  }}}|                      |¦  «        }|                     ||z  | j        z  d¦  «        }| j        r§t
          j                             |                     ¦   «         | j	        d¬¦  «         
                    |¦  «        }t          j        |                     ||z  | j        d¦  «                             ¦   «         d¬¦  «        }|                      |¦  «        }n‚|                     d¬¦  «        } |j        |j         Ž                      d|                     dd¦  «        d¦  «        }|                     ||z  | j        d¦  «        }|                      |¦  «        }|                     ||z  d¦  «        }|                     d¦  «        | j        z  }	|	                     ||z  | j        | j        d¦  «        }
|
                     d¦  «                             ||d¦  «        }
|
|fS )Nrz   T)ÚtauÚhardrº   r   g      ð?ry   )rÔ   rM  rÕ   r~   rŸ   rM   r¾   Úgumbel_softmaxrã   rN  Útype_asr)   r¿   rW  ÚargmaxÚ	new_zerosÚscatter_r  rL  rI  rR  )r7   r#   Ú
batch_sizeÚsequence_lengthrO   Úcodevector_probsÚcodevector_soft_distrV  Úcodevector_idxÚcodevectors_per_grouprL  s              r/   r=   z&UniSpeechGumbelVectorQuantizer.forward²  s  € Ø3@Ô3FÑ0ˆ
�O [ð ×(Ò(¨Ñ7Ô7ˆØ%×*Ò*¨:¸Ñ+GÈ$Ì/Ñ+YÐ[]Ñ^Ô^ˆàŒ=ð 	Då!œ}×;Ò;Ø×#Ò#Ñ%Ô%¨4Ô+;À$ð  <ñ  ô  çŠg�mÑ$Ô$ð õ
 $)¤=Ø×"Ò" :°Ñ#?ÀÄÐRTÑUÔU×[Ò[Ñ]Ô]Ðceð$ñ $ô $Ð ð ×1Ò1Ð2FÑGÔGˆJˆJð +×1Ò1°bÐ1Ñ9Ô9ˆNØ6˜}Ô6¸Ô8KÐL×UÒUØ�N×'Ò'¨¨AÑ.Ô.°ñ ô  Ðð  0×4Ò4°ZÀ/Ñ5QÐSWÔSbÐdfÑgÔgÐà×1Ò1Ð2BÑCÔCˆJà+×0Ò0°¸oÑ1MÈrÑRÔRÐà 0× :Ò :¸2Ñ >Ô >ÀÔAQÑ QÐØ+×0Ò0°¸oÑ1MÈtÌÐ`dÔ`mÐoqÑrÔrˆØ!—o’o bÑ)Ô)×.Ò.¨z¸?ÈBÑOÔOˆà˜JÐ&Ð&r.   )	r%   r&   r'   r(   r5   ÚstaticmethodrW  r=   r?   r@   s   @r/   rE  rE  ’  sl   ø€ € € € € ðð ð
ð ð ð ð ð( ðð ñ „\ðð
#'ð #'ð #'ð #'ð #'ð #'ð #'r.   rE  c                   ó¦   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZ ej        ¦   «         ˆ fd„¦   «         Zdej        ez  fd„Zd	ed
ej        fd„Zˆ xZS )ÚUniSpeechPreTrainedModelr^   Ú	unispeechr    ÚaudioTc           
      óL  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rZt	          j        |j        j        dd¬¦  «         t	          j        |j        j	        ¦  «         t	          j
        |j        ¦  «         dS t          |t          ¦  «        rwt	          j        |j        j        ddt          j        d|j        j        d         |j        j        z  z  ¦  «        z  ¬¦  «         t	          j        |j        j	        d¦  «         dS t          |t&          ¦  «        rgt          j        d|j        j        z  ¦  «        }t	          j
        |j        j        | |¬¦  «         t	          j
        |j        j	        | |¬¦  «         dS t          |t,          j        ¦  «        rnt	          j        |j        ¦  «         |j	        �Pt          j        |j        |j        |j        d         z  z  ¦  «        }t	          j
        |j	        | |¬¦  «         dS dS dS )zInitialize the weightsr°   r   )rP  Ústdr   r3   )ÚaÚbN)r4   Ú_init_weightsrí   rE  ÚinitÚnormal_rM  rI   Úzeros_rf   Úuniform_rL  rB   rQ   ÚmathÚsqrtrD   Úin_channelsÚ	constant_r£   r©   Úin_featuresrM   rN   Úkaiming_normal_rF   )r7   r±   Úkr9   s      €r/   ro  z&UniSpeechPreTrainedModel._init_weightsã  s÷  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%å�fÕ<Ñ=Ô=ð 	6ÝŒL˜Ô+Ô2¸À!ÐDÑDÔDÐDÝŒK˜Ô*Ô/Ñ0Ô0Ð0ÝŒM˜&Ô,Ñ-Ô-Ð-Ð-Ð-Ý˜Õ @ÑAÔAð 	6ÝŒLØ”Ô"ØØ�œ	 ! v¤{Ô'>¸qÔ'AÀFÄKÔD[Ñ'[Ñ"\Ñ]Ô]Ñ]ðñ ô ð õ
 ŒN˜6œ;Ô+¨QÑ/Ô/Ð/Ð/Ð/Ý˜Õ :Ñ;Ô;ð 		6Ý”	˜!˜fÔ/Ô;Ñ;Ñ<Ô<ˆAÝŒM˜&Ô+Ô2°q°b¸AÐ>Ñ>Ô>Ð>ÝŒM˜&Ô+Ô0°Q°B¸!Ð<Ñ<Ô<Ð<Ð<Ð<Ý˜¥¤	Ñ*Ô*ð 	6ÝÔ  ¤Ñ/Ô/Ð/àŒ{Ð&Ý”I˜fœm¨vÔ/AÀFÔDVÐWXÔDYÑ/YÑZÑ[Ô[�Ý”˜fœk¨a¨R°1Ð5Ñ5Ô5Ð5Ð5Ð5ð	6ð 	6ð 'Ð&r.   Úinput_lengthsc                 óz   — d„ }t          | j        j        | j        j        ¦  «        D ]\  }} ||||¦  «        }Œ|S )zH
        Computes the output length of the convolutional layers
        c                 ó<   — t          j        | |z
  |d¬¦  «        dz   S )NÚfloor)Úrounding_moder   )r)   Údiv)Úinput_lengthrD   re   s      r/   Ú_conv_out_lengthzSUniSpeechPreTrainedModel._get_feat_extract_output_lengths.<locals>._conv_out_length  s&   € õ ”9˜\¨KÑ7¸ÈwÐWÑWÔWÐZ[Ñ[Ð[r.   )Úzipr^   rj   rk   )r7   r{  r‚  rD   re   s        r/   Ú _get_feat_extract_output_lengthsz9UniSpeechPreTrainedModel._get_feat_extract_output_lengthsþ  s\   € ð
	\ð 	\ð 	\õ
 $' t¤{Ô'>ÀÄÔ@WÑ#XÔ#Xð 	Qð 	QÑˆK˜Ø,Ð,¨]¸KÈÑPÔPˆMˆMàÐr.   Úfeature_vector_lengthrµ   c                 ó  — |                      d¬¦  «        d d …df         }|                      |¦  «                             t          j        ¦  «        }|j        d         }t          j        ||f|j        |j        ¬¦  «        }d|t          j	        |j        d         |j        ¬¦  «        |dz
  f<   | 
                    dg¦  «                              d¦  «         
                    dg¦  «                             ¦   «         }|S )Nrz   rº   r   )Údtyper  r   )r  )Úcumsumr„  r  r)   ÚlongrÔ   Úzerosr‡  r  ÚarangeÚfliprä   )r7   r…  rµ   Únon_padded_lengthsÚoutput_lengthsr`  s         r/   Ú"_get_feature_vector_attention_maskz;UniSpeechPreTrainedModel._get_feature_vector_attention_mask  sþ   € ð ,×2Ò2°rÐ2Ñ:Ô:¸1¸1¸1¸b¸5ÔAÐØ×>Ò>Ð?QÑRÔR×UÒUÕV[ÔV`ÑaÔaˆØ#Ô)¨!Ô,ˆ
åœØÐ.Ð/°~Ô7KÐTbÔTið
ñ 
ô 
ˆð uvˆ�œ ^Ô%9¸!Ô%<À^ÔEZÐ[Ñ[Ô[Ð]kÐnoÑ]oÐpÑqØ'×,Ò,¨b¨TÑ2Ô2×9Ò9¸"Ñ=Ô=×BÒBÀBÀ4ÑHÔH×MÒMÑOÔOˆØÐr.   )r%   r&   r'   r   r+   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnr)   Úno_gradro  Ú
LongTensorrâ   r„  r�  r?   r@   s   @r/   rh  rh  Ø  sÊ   ø€ € € € € € àÐÐÑØ#ÐØ$€OØÐØ&*Ð#ØÐØ€NØÐà€U„]�_„_ð6ð 6ð 6ð 6ñ „_ð6ð4¸eÔ>NÐQTÑ>Tð ð ð ð ðÈð Ð]bÔ]mð ð ð ð ð ð ð ð r.   rh  rÔ   Ú	mask_probÚmask_lengthÚ	min_masksrÒ   c                 ó@  ‡‡‡‡‡— | \  }Š‰dk     rt          d¦  «        ‚‰‰k    rt          d‰› d‰› d�¦  «        ‚t          j                             d¦  «                             ¦   «         Šˆˆˆˆˆfd„}|�9|                     ¦   «                              d¦  «                             ¦   «         nˆfd	„t          |¦  «        D ¦   «         }t          j	        |‰ft          ¬
¦  «        }g }	 |‰¦  «        }
|
dk    r|S |D ]·} ||¦  «        }t          j                             t          j        |‰dz
  z
  ¦  «        |d¬¦  «        }t          |¦  «        dk    r‰dz
  }n|d         }t          j        |t          j        |
|z
  t          j        ¬
¦  «        |z  g¦  «        }|	                     |¦  «         Œ¸t          j        |	¦  «        }	t          j        |	dd…dd…df         ||
‰f¦  «        }	|	                     ||
‰z  ¦  «        }	t          j        ‰¦  «        dddd…f         }t          j        |||
‰f¦  «                             ||
‰z  ¦  «        }|	|z   }	|	                     ¦   «         ‰dz
  k    r‰dz
  |	|	‰dz
  k    <   t          j        ||	dd¦  «         |S )an  
    Computes random mask spans for a given shape. Used to implement [SpecAugment: A Simple Data Augmentation Method for
    ASR](https://huggingface.co/papers/1904.08779). Note that this method is not optimized to run on TPU and should be run on
    CPU as part of the preprocessing during training.

    Args:
        shape: The shape for which to compute masks. This should be of a tuple of size 2 where
               the first element is the batch size and the second element is the length of the axis to span.
        mask_prob:  The percentage of the whole axis (between 0 and 1) which will be masked. The number of
                    independently generated mask spans of length `mask_length` is computed by
                    `mask_prob*shape[1]/mask_length`. Note that due to overlaps, `mask_prob` is an upper bound and the
                    actual percentage will be smaller.
        mask_length: size of the mask
        min_masks: minimum number of masked spans
        attention_mask: A (right-padded) attention mask which independently shortens the feature axis of
                        each batch dimension.
    r   z&`mask_length` has to be bigger than 0.zO`mask_length` has to be smaller than `sequence_length`, but got `mask_length`: z and `sequence_length`: ú`c                 ó¸   •— t          ‰| z  ‰z  ‰z   ¦  «        }t          |‰¦  «        }|‰z  ‰k    r‰‰z  }| ‰dz
  z
  |k     rt          | ‰dz
  z
  d¦  «        }|S )z;Given input length, compute how many spans should be maskedr   r   )râ   Úmax)r�  Únum_masked_spanÚepsilonrš  r™  r›  ra  s     €€€€€r/   Úcompute_num_masked_spanz6_compute_mask_indices.<locals>.compute_num_masked_spanC  s~   ø€ å˜i¨,Ñ6¸ÑDÀwÑNÑOÔOˆÝ˜o¨yÑ9Ô9ˆð ˜[Ñ(¨?Ò:Ð:Ø-°Ñ<ˆOð ˜;¨™?Ñ+¨oÒ=Ð=Ý! ,°+À±/Ñ"BÀAÑFÔFˆOàÐr.   Nrz   c                 ó   •— g | ]}‰‘ŒS r-   r-   )rŠ   r  ra  s     €r/   rŒ   z)_compute_mask_indices.<locals>.<listcomp>V  s   ø€ Ð9Ð9Ð9 !ˆoÐ9Ð9Ð9r.   ©r‡  r   F)Úreplace)r’   ÚnpÚrandomr  ÚitemÚdetachrR  Útolistr�   rŠ  rä   Úchoicer‹  ÚlenÚconcatenateÚonesÚint32ÚappendÚarrayÚbroadcast_torØ   rŸ  Úput_along_axis)rÔ   r™  rš  rµ   r›  r`  r¢  r{  Úspec_aug_maskÚspec_aug_mask_idxsÚmax_num_masked_spanr�  r   Úspec_aug_mask_idxÚdummy_mask_idxÚoffsetsr¡  ra  s    `` `           @@r/   Ú_compute_mask_indicesrº    sP  øøøøø€ ð0 #(Ñ€J�à�Q‚€ÝÐAÑBÔBÐBà�_Ò$Ð$Ýð:Ð^ið :ð :Ø'6ð:ð :ð :ñ
ô 
ð 	
õ Œi�nŠn˜QÑÔ×$Ò$Ñ&Ô&€Gðð ð ð ð ð ð ð ð ð$ Ð%ð 	×ÒÑÔ×#Ò# BÑ'Ô'×.Ò.Ñ0Ô0Ð0à9Ð9Ð9Ð9¥u¨ZÑ'8Ô'8Ð9Ñ9Ô9ð õ ”H˜j¨/Ð:Å$ÐGÑGÔG€MØÐà1Ð1°/ÑBÔBÐà˜aÒÐØÐà%ð 5ð 5ˆà1Ð1°,Ñ?Ô?ˆõ œI×,Ò,ÝŒI�l k°A¡oÑ6Ñ7Ô7¸ÐRWð -ñ 
ô 
Ðõ Ð Ñ!Ô! QÒ&Ð&ð -¨qÑ0ˆNˆNà.¨qÔ1ˆNåœNØ¥¤Ð(;¸oÑ(MÕUWÔU]Ð ^Ñ ^Ô ^ÐaoÑ oÐpñ
ô 
Ðð 	×!Ò!Ð"3Ñ4Ô4Ð4Ð4åœÐ"4Ñ5Ô5Ðõ œØ˜1˜1˜1˜a˜a˜a ˜:Ô&¨Ð5HÈ+Ð(Vñô Ðð ,×3Ò3°JÐ@SÐVaÑ@aÑbÔbÐõ Œi˜Ñ$Ô$ T¨4°°° ]Ô3€GÝŒo˜g¨
Ð4GÈÐ'UÑVÔV×^Ò^ØÐ'¨+Ñ5ñô €Gð ,¨gÑ5Ðð ×ÒÑÔ /°AÑ"5Ò5Ð5ØGVÐYZÑGZÐÐ-°À!Ñ0CÒCÑDõ Ô�mÐ%7¸¸BÑ?Ô?Ð?àÐr.   c                   óð   ‡ — e Zd Zdefˆ fd„Z	 	 ddej        dej        dz  dej        dz  fd„Ze		 	 	 	 	 ddej
        dz  dej
        dz  dej        dz  d	edz  d
edz  dedz  deez  fd„¦   «         Zˆ xZS )ÚUniSpeechModelr^   c                 óà  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |j        dk    s|j        dk    rBt          j
        t          j        |j        ¦  «                             ¦   «         ¦  «        | _        |j        rt#          |¦  «        | _        nt'          |¦  «        | _        |                      ¦   «          d S ©Nr°   )r4   r5   r^   r„   Úfeature_extractorr£   Úfeature_projectionÚmask_time_probÚmask_feature_probrM   rK  r)   rå   rO   rs  Úmasked_spec_embedÚdo_stable_layer_normr?  Úencoderr  Ú	post_initr­   s     €r/   r5   zUniSpeechModel.__init__™  sË   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ!8¸Ñ!@Ô!@ˆÔÝ"<¸VÑ"DÔ"DˆÔàÔ  3Ò&Ð&¨&Ô*BÀSÒ*HÐ*HÝ%'¤\µ%´,¸vÔ?QÑ2RÔ2R×2[Ò2[Ñ2]Ô2]Ñ%^Ô%^ˆDÔ"àÔ&ð 	4Ý:¸6ÑBÔBˆDŒLˆLå+¨FÑ3Ô3ˆDŒLð 	�ŠÑÔÐÐÐr.   Nr#   Úmask_time_indicesrµ   c                 ó  — t          | j        dd¦  «        s|S |                     ¦   «         \  }}}|�#| j                             |j        ¦  «        ||<   n“| j        j        dk    rƒ| j        r|t          ||f| j        j        | j        j	        || j        j
        ¬¦  «        }t          j        ||j        t          j        ¬¦  «        }| j                             |j        ¦  «        ||<   | j        j        dk    r†| j        rt          ||f| j        j        | j        j        | j        j        ¬¦  «        }t          j        ||j        t          j        ¬¦  «        }|dd…df                              d|d¦  «        }d||<   |S )	z¢
        Masks extracted features along time axis and/or along feature axis according to
        [SpecAugment](https://huggingface.co/papers/1904.08779).
        Úapply_spec_augmentTNr   )r™  rš  rµ   r›  )r  r‡  )r™  rš  r›  rz   )r;  r^   r¼   rÃ  r  r‡  rÁ  rŸ   rº  Úmask_time_lengthÚmask_time_min_masksr)   r+  r  rä   rÂ  Úmask_feature_lengthÚmask_feature_min_masksÚexpand)r7   r#   rÇ  rµ   r`  ra  rO   Úmask_feature_indicess           r/   Ú_mask_hidden_statesz"UniSpeechModel._mask_hidden_statesª  s—  € õ �t”{Ð$8¸$Ñ?Ô?ð 	!Ø Ð ð 4A×3EÒ3EÑ3GÔ3GÑ0ˆ
�O [àÐ(à/3Ô/E×/HÒ/HÈÔI\Ñ/]Ô/]ˆMÐ+Ñ,Ð,ØŒ[Ô'¨!Ò+Ð+°´Ð+Ý 5Ø˜_Ð-Øœ+Ô4Ø œKÔ8Ø-Øœ+Ô9ð!ñ !ô !Ðõ !&¤Ð->À}ÔG[ÕchÔcmÐ nÑ nÔ nÐØ/3Ô/E×/HÒ/HÈÔI\Ñ/]Ô/]ˆMÐ+Ñ,àŒ;Ô(¨1Ò,Ð,°´Ð,å#8Ø˜[Ð)Øœ+Ô7Ø œKÔ;Øœ+Ô<ð	$ñ $ô $Ð õ $)¤<Ð0DÈ]ÔMaÕinÔisÐ#tÑ#tÔ#tÐ Ø#7¸¸¸¸4¸Ô#@×#GÒ#GÈÈOÐ]_Ñ#`Ô#`Ð Ø23ˆMÐ.Ñ/àÐr.   r    rÑ   r  r  rÒ   c                 óþ  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|                      |¦  «        }|                     dd¦  «        }|�!|                      |j        d         |¦  «        }|                      |¦  «        \  }	}|  	                    |	||¬¦  «        }	|  
                    |	||||¬¦  «        }
|
d         }	|s|	|f|
dd…         z   S t          |	||
j        |
j        ¬¦  «        S )a/  
        mask_time_indices (`torch.BoolTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Indices to mask extracted features for contrastive loss. When in training mode, model learns to predict
            masked extracted features in *config.proj_codevector_dim* space.
        Nr   r3   )rÇ  rµ   ©rµ   rÑ   r  r  r   )r  Úextract_featuresr#   r$   )r^   rÑ   r  r  r¿  r`   r�  rÔ   rÀ  rÐ  rÅ  ÚUniSpeechBaseModelOutputr#   r$   )r7   r    rµ   rÇ  rÑ   r  r  r·   rÓ  r#   Úencoder_outputss              r/   r=   zUniSpeechModel.forwardØ  sW  € ð  2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆà×1Ò1°,Ñ?Ô?ÐØ+×5Ò5°a¸Ñ;Ô;ÐàÐ%à!×DÒDÐEUÔE[Ð\]ÔE^Ð`nÑoÔoˆNà*.×*AÒ*AÐBRÑ*SÔ*SÑ'ˆÐ'Ø×0Ò0ØÐ->È~ð 1ñ 
ô 
ˆð Ÿ,š,ØØ)Ø/Ø!5Ø#ð 'ñ 
ô 
ˆð (¨Ô*ˆàð 	KØ!Ð#3Ð4°ÀqÀrÀrÔ7JÑJÐJå'Ø+Ø-Ø)Ô7Ø&Ô1ð	
ñ 
ô 
ð 	
r.   r  ©NNNNN)r%   r&   r'   r   r5   r)   r*   r˜  rÐ  r   rå   rä   r,   rÔ  r=   r?   r@   s   @r/   r¼  r¼  —  s7  ø€ € € € € ð˜ð ð ð ð ð ð ð( 7;Ø26ð	,ð ,àÔ(ð,ð !Ô,¨tÑ3ð,ð Ô(¨4Ñ/ð	,ð ,ð ,ð ,ð\ ð /3Ø6:Ø)-Ø,0Ø#'ð3
ð 3
à”l TÑ)ð3
ð œ tÑ+ð3
ð !Ô,¨tÑ3ð	3
ð
   $™;ð3
ð # T™kð3
ð ˜D‘[ð3
ð 
Ð)Ñ	)ð3
ð 3
ð 3
ñ „^ð3
ð 3
ð 3
ð 3
ð 3
r.   r¼  zZ
    UniSpeech Model with a vector-quantization module and ctc loss for pre-training.
    c                   óò   ‡ — e Zd Zdefˆ fd„Zdefd„Zd„ Ze	 dde	j
        de	j
        d	e	j
        defd
„¦   «         Ze	 	 	 	 dde	j        dz  de	j        dz  dedz  dedz  dedz  deez  fd„¦   «         Zˆ xZS )ÚUniSpeechForPreTrainingr^   c                 ó  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        ¦  «        | _        t          |¦  «        | _	        t	          j
        |j        |j        ¦  «        | _        t	          j
        |j        |j        ¦  «        | _        t	          j
        |j        |j        ¦  «        | _        t	          j        |j        ¦  «        | _        |                      ¦   «          d S rp   )r4   r5   r¼  ri  rM   rª   Úfeat_quantizer_dropoutÚdropout_featuresrE  Ú	quantizerr¨   rJ  Úproj_codevector_dimÚ	project_qrO   Úproject_hidÚnum_ctc_classesÚctc_projÚfinal_dropoutr¬   rÆ  r­   s     €r/   r5   z UniSpeechForPreTraining.__init__  sÆ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý'¨Ñ/Ô/ˆŒÝ "¤
¨6Ô+HÑ IÔ IˆÔå7¸Ñ?Ô?ˆŒÝœ 6Ô#8¸&Ô:TÑUÔUˆŒÝœ9 VÔ%?ÀÔASÑTÔTˆÔåœ	 &Ô"4°fÔ6LÑMÔMˆŒÝ”z &Ô"6Ñ7Ô7ˆŒð 	�ŠÑÔÐÐÐr.   rN  c                 ó   — || j         _        dS )zb
        Set the Gumbel softmax temperature to a given value. Only necessary for training
        N)rÜ  rN  )r7   rN  s     r/   Úset_gumbel_temperaturez.UniSpeechForPreTraining.set_gumbel_temperature$  s   € ð &1ˆŒÔ"Ð"Ð"r.   c                 óB   — | j         j                             ¦   «          dS ©z¨
        Calling this function will disable the gradient computation for the feature encoder so that its parameter will
        not be updated during training.
        N©ri  r¿  r�   ©r7   s    r/   Úfreeze_feature_encoderz.UniSpeechForPreTraining.freeze_feature_encoder*  ó!   € ð
 	ŒÔ(×;Ò;Ñ=Ô=Ð=Ð=Ð=r.   r   Útarget_featuresÚnegative_featuresÚpredicted_featuresc                 óà   — t          j        | |gd¬¦  «        } t          j        |                     ¦   «         |                      ¦   «         d¬¦  «        }|                     | ¦  «        }||z  }|S )zé
        Compute logits for contrastive loss based using cosine similarity as the distance measure between
        `[positive_feature, negative_features]` and `[predicted_features]`. Additionally, temperature can be applied.
        r   rº   rz   )r)   ÚcatÚcosine_similarityrã   r\  )rë  rì  rí  rN  Úlogitss        r/   Úcompute_contrastive_logitsz2UniSpeechForPreTraining.compute_contrastive_logits1  sq   € õ  œ) _Ð6GÐ$HÈaÐPÑPÔPˆåÔ(Ð);×)AÒ)AÑ)CÔ)CÀ_×EZÒEZÑE\ÔE\ÐbdÐeÑeÔeˆØ—’ Ñ0Ô0ˆð ˜+Ñ%ˆØˆr.   Nr    rµ   rÑ   r  r  rÒ   c                 óN  — |�|n| j         j        }|                      |||||¬¦  «        }|d         }|                      |d         ¦  «        }	|                      |	¦  «        \  }
}|                      |
                     | j        j        j        ¦  «        ¦  «        }
|  	                    |
¦  «        }
t          j        |                     d¦  «        |                     d¦  «        ¦  «                             | j         j        ¦  «        }|                     dd¦  «        }t          j        |¦  «                             ¦   «                              |j        ¦  «        }|                     dd¦  «        }|                     d¦  «        }|                     |d¦  «        |
                     | d¦  «        z   }|                      |¦  «        }|                      |¦  «        }d}|s#|�|||
|f|dd…         z   S ||
|f|dd…         z   S t/          |||
||j        |j        ¬¦  «        S )	a›  
        Example:

        ```python
        >>> import torch
        >>> from transformers import AutoFeatureExtractor, UniSpeechForPreTraining

        >>> feature_extractor = AutoFeatureExtractor.from_pretrained("microsoft/unispeech-large-1500h-cv")
        >>> model = UniSpeechForPreTraining.from_pretrained("microsoft/unispeech-large-1500h-cv")
        >>> # TODO: Add full pretraining example
        ```NrÒ  r   r   rz   r°   r3   )r   r    r!   r"   r#   r$   )r^   r  ri  rÛ  rÜ  rÞ  r  rI   r‡  rß  r)   Úemptyr¼   Úfill_Úreplace_probr`   Ú	bernoullirä   r  r  Úmasked_fillr¬   rá  r   r#   r$   )r7   r    rµ   rÑ   r  r  r·   r  Útransformer_featuresrÓ  Úquantized_featuresr"   Úprob_replace_matrixÚsampled_replace_matrixrñ  r   s                   r/   r=   zUniSpeechForPreTraining.forwardE  sW  € ð, &1Ð%<�k�kÀ$Ä+ÔBYˆà—.’.ØØ)Ø/Ø!5Ø#ð !ñ 
ô 
ˆð  ' qœzÐð  ×0Ò0°¸´Ñ<Ô<ÐØ48·N²NÐCSÑ4TÔ4TÑ1ÐÐ1ð "Ÿ^š^Ð,>×,AÒ,AÀ$Ä.ÔBWÔB]Ñ,^Ô,^Ñ_Ô_ÐØ!×-Ò-Ð.@ÑAÔAÐå#œkÐ*>×*CÒ*CÀAÑ*FÔ*FÐH\×HaÒHaÐbcÑHdÔHdÑeÔe×kÒkØŒKÔ$ñ
ô 
Ðð 2×;Ò;¸A¸qÑAÔAÐÝ!&¤Ð1DÑ!EÔ!E×!JÒ!JÑ!LÔ!L×!OÒ!OÐPdÔPkÑ!lÔ!lÐØ!7×!AÒ!AÀ!ÀQÑ!GÔ!GÐØ!7×!AÒ!AÀ"Ñ!EÔ!EÐØ%×1Ò1Ð2HÈ#ÑNÔNØ×*Ò*Ð,BÐ+BÀCÑHÔHñ
ˆð
 —’˜fÑ%Ô%ˆØ—’˜vÑ&Ô&ˆð ˆØð 	cØÐØÐ2Ð4FÐH]Ð^ÐahÐijÐikÐikÔalÑlÐlØ(Ð*<Ð>SÐTÐW^Ð_`Ð_aÐ_aÔWbÑbÐbå,ØØ1Ø'9Ø"7Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r.   )r   )NNNN)r%   r&   r'   r   r5   râ   rä  ré  rf  r)   r*   rò  r   rå   rä   r,   r   r=   r?   r@   s   @r/   rØ  rØ    sa  ø€ € € € € ð˜ð ð ð ð ð ð ð1°#ð 1ð 1ð 1ð 1ð>ð >ð >ð ð
 ð	ð ØÔ*ðà Ô,ðð "Ô-ðð ð	ð ð ñ „\ðð& ð /3Ø)-Ø,0Ø#'ðE
ð E
à”l TÑ)ðE
ð œ tÑ+ðE
ð   $™;ð	E
ð
 # T™kðE
ð ˜D‘[ðE
ð 
Ð.Ñ	.ðE
ð E
ð E
ñ „^ðE
ð E
ð E
ð E
ð E
r.   rØ  r3   zq
    UniSpeech Model with a `language modeling` head on top for Connectionist Temporal Classification (CTC).
    c                   óÆ   ‡ — e Zd Zddedz  fˆ fd„Zd„ Zd„ Zd„ Ze	 	 	 	 	 dde	j
        dz  de	j
        dz  d	edz  d
edz  dedz  de	j
        dz  deez  fd„¦   «         Zˆ xZS )ÚUniSpeechForCTCNÚtarget_langc                 óª  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        ¦  «        | _        || _        |j	        €t          d| j        › d�¦  «        ‚t          |d¦  «        r|j        r|j        n|j        }t	          j        ||j	        ¦  «        | _        |                      ¦   «          dS )a3  
        target_lang (`str`, *optional*):
            Language id of adapter weights. Adapter weights are stored in the format adapter.<lang>.safetensors or
            adapter.<lang>.bin. Only relevant when using an instance of [`UniSpeechForCTC`] with adapters. Uses 'eng' by
            default.
        NzYou are trying to instantiate zø with a configuration that does not define the vocabulary size of the language model head. Please instantiate the model as follows: `UniSpeechForCTC.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.Úadd_adapter)r4   r5   r¼  ri  rM   rª   râ  r¬   rÿ  Ú
vocab_sizer’   r9   rS   r  Úoutput_hidden_sizerO   r¨   Úlm_headrÆ  )r7   r^   rÿ  r  r9   s       €r/   r5   zUniSpeechForCTC.__init__—  sÝ   ø€ õ 	‰Œ×Ò˜Ñ Ô Ð å'¨Ñ/Ô/ˆŒÝ”z &Ô"6Ñ7Ô7ˆŒà&ˆÔàÔÐ$ÝðH°´ð Hð Hð Hñô ð õ *1°¸Ñ)GÔ)GÐvÈFÔL^ÐvˆFÔ%Ð%ÐdjÔdvð 	õ ”yÐ!3°VÔ5FÑGÔGˆŒð 	�ŠÑÔÐÐÐr.   c                 óT  — t          ¦   «         t          j        d¦  «        k    rdS | j        }|�)t	          | j        dd¦  «        €t          d|› d�¦  «        ‚|€2t	          | j        dd¦  «        �t                               d¦  «         dS |�|  	                    |d¬¦  «         dS dS )	a'  
        This method overwrites [`~PreTrainedModel.tie_weights`] so that adapter weights can be correctly loaded when
        passing `target_lang=...` to `from_pretrained(...)`.

        This method is **not** supposed to be called by the user and is prone to be changed in the future.
        ÚmetaNr/  zCannot pass `target_lang`: z- if `config.adapter_attn_dim` is not defined.z)By default `target_lang` is set to 'eng'.T)Ú
force_load)
r   r)   r  rÿ  r;  r^   r’   ÚloggerÚinfoÚload_adapter)r7   r·   rÿ  s      r/   Útie_weightszUniSpeechForCTC.tie_weights´  sÃ   € õ 6Ñ7Ô7½5¼<ÈÑ;OÔ;OÒOÐOØˆFð Ô&ˆàÐ"¥w¨t¬{Ð<NÐPTÑ'UÔ'UÐ']ÝÐu¸;ÐuÐuÐuÑvÔvÐvØÐ ¥W¨T¬[Ð:LÈdÑ%SÔ%SÐ%_Ý�KŠKÐCÑDÔDÐDÐDÐDØÐ$Ø×Ò˜k°dÐÑ;Ô;Ð;Ð;Ð;ð %Ð$r.   c                 óB   — | j         j                             ¦   «          dS ræ  rç  rè  s    r/   ré  z&UniSpeechForCTC.freeze_feature_encoderÌ  rê  r.   c                 óL   — | j                              ¦   «         D ]	}d|_        Œ
dS ©zÒ
        Calling this function will disable the gradient computation for the base model so that its parameters will not
        be updated during training. Only the classification head will be updated.
        FN©ri  r™   rš   r›   s     r/   Úfreeze_base_modelz!UniSpeechForCTC.freeze_base_modelÓ  ó6   € ð
 ”^×.Ò.Ñ0Ô0ð 	(ð 	(ˆEØ"'ˆEÔÐð	(ð 	(r.   r    rµ   rÑ   r  r  ÚlabelsrÒ   c           
      óp  — |�|n| j         j        }|�>|                     ¦   «         | j         j        k    rt	          d| j         j        › �¦  «        ‚|                      |||||¬¦  «        }|d         }	|                      |	¦  «        }	|                      |	¦  «        }
d}|��Z|�|nt          j	        |t          j
        ¬¦  «        }|                      |                     d¦  «        ¦  «                             t          j
        ¦  «        }|dk    }|                     d¦  «        }|                     |¦  «        }t          j                             |
dt          j        ¬¦  «                             dd¦  «        }t          j        j                             d	¬
¦  «        5  t          j                             ||||| j         j        | j         j        | j         j        ¬¦  «        }ddd¦  «         n# 1 swxY w Y   |s|
f|t6          d…         z   }|�|f|z   n|S t9          ||
|j        |j        ¬¦  «        S )aà  
        labels (`torch.LongTensor` of shape `(batch_size, target_length)`, *optional*):
            Labels for connectionist temporal classification. Note that `target_length` has to be smaller or equal to
            the sequence length of the output logits. Indices are selected in `[-100, 0, ..., config.vocab_size - 1]`.
            All labels set to `-100` are ignored (masked), the loss is only computed for labels in `[0, ...,
            config.vocab_size - 1]`.
        Nz$Label values must be <= vocab_size: rÒ  r   r¤  rz   )rK   r‡  r   F)Úenabled)ÚblankÚ	reductionÚzero_infinity©r   rñ  r#   r$   )r^   r  rŸ  r  r’   ri  r¬   r  r)   Ú	ones_liker‰  r„  rR  r  Úmasked_selectrM   r¾   Úlog_softmaxÚfloat32r`   ÚbackendsÚcudnnÚflagsÚctc_lossÚpad_token_idÚctc_loss_reductionÚctc_zero_infinityÚ_HIDDEN_STATES_START_POSITIONr   r#   r$   )r7   r    rµ   rÑ   r  r  r  r·   r  r#   rñ  r   r{  Úlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probsÚoutputs                     r/   r=   zUniSpeechForCTC.forwardÛ  s€  € ð$ &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ &§*¢*¡,¤,°$´+Ô2HÒ"HÐ"HÝÐ\ÀDÄKÔDZÐ\Ð\Ñ]Ô]Ð]à—.’.ØØ)Ø/Ø!5Ø#ð !ñ 
ô 
ˆð   œ
ˆØŸš ]Ñ3Ô3ˆà—’˜mÑ,Ô,ˆàˆØÑð #1Ð"<��Å%Ä/ÐR^ÕfkÔfpÐBqÑBqÔBqð ð !×AÒAÀ.×BTÒBTÐUWÑBXÔBXÑYÔY×\Ò\Õ]bÔ]gÑhÔhˆMð ! Aš+ˆKØ(Ÿ_š_¨RÑ0Ô0ˆNØ &× 4Ò 4°[Ñ AÔ AÐõ œ×1Ò1°&¸bÍÌÐ1ÑVÔV×`Ò`ÐabÐdeÑfÔfˆIå”Ô%×+Ò+°EÐ+Ñ:Ô:ð 	ð 	Ý”}×-Ò-ØØ%Ø!Ø"Øœ+Ô2Ø"œkÔ<Ø"&¤+Ô"?ð .ñ ô �ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ð 	FØ�Y Õ)FÐ)GÐ)GÔ!HÑHˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEåØ˜f°GÔ4IÐV]ÔVhð
ñ 
ô 
ð 	
s   Æ AG1Ç1G5Ç8G5rp   rÖ  )r%   r&   r'   rï   r5   r  ré  r  r   r)   rå   rä   r,   r   r=   r?   r@   s   @r/   rþ  rþ  ‘  s*  ø€ € € € € ðð ¨C°$©Jð ð ð ð ð ð ð:<ð <ð <ð0>ð >ð >ð(ð (ð (ð ð /3Ø)-Ø,0Ø#'Ø&*ðE
ð E
à”l TÑ)ðE
ð œ tÑ+ðE
ð   $™;ð	E
ð
 # T™kðE
ð ˜D‘[ðE
ð ”˜tÑ#ðE
ð 
�Ñ	ðE
ð E
ð E
ñ „^ðE
ð E
ð E
ð E
ð E
r.   rþ  z˜
    UniSpeech Model with a sequence classification head on top (a linear layer over the pooled output) for tasks like
    SUPERB Keyword Spotting.
    c                   ó²   ‡ — e Zd Zˆ fd„Zd„ Zd„ Ze	 	 	 	 	 ddej        dz  dej        dz  de	dz  de	dz  d	e	dz  d
ej        dz  de
ez  fd„¦   «         Zˆ xZS )Ú"UniSpeechForSequenceClassificationc                 óô  •— t          ¦   «                              |¦  «         t          |d¦  «        r|j        rt	          d¦  «        ‚t          |¦  «        | _        |j        dz   }|j        r.t          j
        t          j        |¦  «        |z  ¦  «        | _        t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        |                      ¦   «          d S )Nr  z`Sequence classification does not support the use of UniSpeech adapters (config.add_adapter=True)r   )r4   r5   rS   r  r’   r¼  ri  r  Úuse_weighted_layer_sumrM   rK  r)   r®  Úlayer_weightsr¨   rO   Úclassifier_proj_sizeÚ	projectorÚ
num_labelsÚ
classifierrÆ  )r7   r^   Ú
num_layersr9   s      €r/   r5   z+UniSpeechForSequenceClassification.__init__+  sá   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å�6˜=Ñ)Ô)ð 	¨fÔ.@ð 	ÝØrñô ð õ (¨Ñ/Ô/ˆŒØÔ-°Ñ1ˆ
ØÔ(ð 	SÝ!#¤­e¬j¸Ñ.DÔ.DÀzÑ.QÑ!RÔ!RˆDÔÝœ 6Ô#5°vÔ7RÑSÔSˆŒÝœ) FÔ$?ÀÔARÑSÔSˆŒð 	�ŠÑÔÐÐÐr.   c                 óB   — | j         j                             ¦   «          dS ræ  rç  rè  s    r/   ré  z9UniSpeechForSequenceClassification.freeze_feature_encoder<  rê  r.   c                 óL   — | j                              ¦   «         D ]	}d|_        Œ
dS r  r  r›   s     r/   r  z4UniSpeechForSequenceClassification.freeze_base_modelC  r  r.   Nr    rµ   rÑ   r  r  r  rÒ   c                 ód  — |�|n| j         j        }| j         j        rdn|}|                      |||||¬¦  «        }| j         j        rx|t                   }	t          j        |	d¬¦  «        }	t          j         	                    | j
        d¬¦  «        }
|	|
                     ddd¦  «        z                       d¬¦  «        }	n|d         }	|                      |	¦  «        }	|€|	                     d¬¦  «        }n�|                      |	j        d         |¦  «        }|                     d¦  «                             dd|	j        d         ¦  «        }d	|	| <   |	                     d¬¦  «        |                     d¬¦  «                             dd¦  «        z  }|                      |¦  «        }d}|�Kt)          ¦   «         } ||                     d| j         j        ¦  «        |                     d¦  «        ¦  «        }|s|f|t          d…         z   }|�|f|z   n|S t-          |||j        |j        ¬
¦  «        S )a  
        input_values (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
            Float values of input raw speech waveform. Values can be obtained by loading a `.flac` or `.wav` audio file
            into an array of type `list[float]`, a `numpy.ndarray` or a `torch.Tensor`, *e.g.* via the torchcodec library
            (`pip install torchcodec`) or the soundfile library (`pip install soundfile`).
            To prepare the array into `input_values`, the [`AutoProcessor`] should be used for padding and conversion
            into a tensor of type `torch.FloatTensor`. See [`UniSpeechProcessor.__call__`] for details.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        NTrÒ  r   rº   rz   r   r3   r°   r  )r^   r  r-  ri  r$  r)   ÚstackrM   r¾   r¿   r.  rÕ   rR  r0  rP  r�  rÔ   r  r  r2  r   r1  r   r#   r$   )r7   r    rµ   rÑ   r  r  r  r·   r  r#   Únorm_weightsÚpooled_outputÚpadding_maskÚexpand_padding_maskrñ  r   Úloss_fctr)  s                     r/   r=   z*UniSpeechForSequenceClassification.forwardK  sW  € ð0 &1Ð%<�k�kÀ$Ä+ÔBYˆØ'+¤{Ô'IÐc˜t˜tÐOcÐà—.’.ØØ)Ø/Ø!5Ø#ð !ñ 
ô 
ˆð Œ;Ô-ð 	'Ø#Õ$AÔBˆMÝ!œK¨¸1Ð=Ñ=Ô=ˆMÝœ=×0Ò0°Ô1CÈÐ0ÑLÔLˆLØ*¨\×->Ò->¸rÀ1ÀaÑ-HÔ-HÑH×MÒMÐRSÐMÑTÔTˆMˆMà# AœJˆMàŸš }Ñ5Ô5ˆØÐ!Ø)×.Ò.°1Ð.Ñ5Ô5ˆMˆMà×BÒBÀ=ÔCVÐWXÔCYÐ[iÑjÔjˆLØ".×"8Ò"8¸Ñ"<Ô"<×"CÒ"CÀAÀqÈ-ÔJ]Ð^_ÔJ`Ñ"aÔ"aÐØ25ˆMÐ.Ð.Ñ/Ø)×-Ò-°!Ð-Ñ4Ô4°|×7GÒ7GÈAÐ7GÑ7NÔ7N×7SÒ7SÐTVÐXYÑ7ZÔ7ZÑZˆMà—’ Ñ/Ô/ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬KÔ,BÑCÔCÀVÇ[Â[ÐQSÁ_Ä_ÑUÔUˆDàð 	FØ�Y Õ)FÐ)GÐ)GÔ!HÑHˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r.   rÖ  )r%   r&   r'   r5   ré  r  r   r)   rå   rä   r,   r   r=   r?   r@   s   @r/   r+  r+  $  s  ø€ € € € € ðð ð ð ð ð">ð >ð >ð(ð (ð (ð ð /3Ø)-Ø,0Ø#'Ø&*ðC
ð C
à”l TÑ)ðC
ð œ tÑ+ðC
ð   $™;ð	C
ð
 # T™kðC
ð ˜D‘[ðC
ð ”˜tÑ#ðC
ð 
Ð)Ñ	)ðC
ð C
ð C
ñ „^ðC
ð C
ð C
ð C
ð C
r.   r+  )rþ  rØ  r+  r¼  rh  r¾  r;   )Prt  Úcollections.abcr   Údataclassesr   Únumpyr¦  r)   Útorch.nnrM   r   Ú r   rp  Úactivationsr   Úintegrations.deepspeedr	   Úintegrations.fsdpr
   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   r   r   Úprocessing_utilsr   rR   r   r   r   Úconfiguration_unispeechr   Ú
get_loggerr%   r  r   ÚModuler1   rB   rb   rs   r|   r„   r£   rå   rã   rÃ   rÅ   rç   rö   r  r-  r9  r?  rE  rh  r,   râ   r˜  Úndarrayrº  rÔ  r¼  rØ  r$  rþ  r+  Ú__all__r-   r.   r/   ú<module>rP     sf  ðð* €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø @Ð @Ð @Ð @Ð @Ð @Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð sÐ rÐ rÐ rÐ rÐ rÐ rÐ rÐ rÐ rØ &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 Kñ 7ô 7ñ „ñô ð7ð.ð ð ð ð ˜BœIñ ô ð ð*ð *ð *ð *ð * r¤yñ *ô *ð *ðZð ð ð ð Ð$>ñ ô ð ð*ð ð ð ð Ð"<ñ ô ð ð6ð ð ð ð Ð"<ñ ô ð ð0&ð &ð &ð &ð &˜bœiñ &ô &ð &ðR1ð 1ð 1ð 1ð 1 ¤ñ 1ô 1ð 1ð* !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8R/ð R/ð R/ð R/ð R/˜œñ R/ô R/ð R/ðjð ð ð ð ˜2œ9ñ ô ð ð0!ð !ð !ð !ð !Ð6ñ !ô !ð !ðHE
ð E
ð E
ð E
ð E
�r”yñ E
ô E
ð E
ðPð ð ð ð  ¤	ñ ô ð ð2+ð +ð +ð +ð +Ð+Eñ +ô +ð +ð\I
ð I
ð I
ð I
ð I
 b¤iñ I
ô I
ð I
ðXC'ð C'ð C'ð C'ð C' R¤Yñ C'ô C'ð C'ðL ðAð Að Að Að A˜ñ Aô Añ „ðAðP /3Øðtð tØ��c�Œ?ðtàðtð ðtð Ô$ tÑ+ð	tð
 ðtð „Zðtð tð tð tðn 3Ð ð ðt
ð t
ð t
ð t
ð t
Ð-ñ t
ô t
ñ „ðt
ðn €ððñ ô ð
w
ð w
ð w
ð w
ð w
Ð6ñ w
ô w
ñô ð
w
ðt !"Ð ð €ððñ ô ð
K
ð K
ð K
ð K
ð K
Ð.ñ K
ô K
ñô ð
K
ð\ €ððñ ô ðe
ð e
ð e
ð e
ð e
Ð)Añ e
ô e
ñô ðe
ðPð ð €€€r.   