ó
    ‡Ž¡jƒ»  ã                   óº  • S SK Jr  S SKrS SKrS SKJr  S SKJr  SSKJ	r
  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJr  SSKJrJrJ r   SSK!J"r"  SSK#J$r$J%r%J&r&  SSK'J(r(J)r)  SSK*J+r+J,r,  SSK-J.r.  \&R^                  " \05      r1 " S S\Rd                  5      r3 " S S\Rd                  5      r4 " S S\5      r5 " S S\5      r6 " S S\5      r7 " S S \Rd                  5      r8 " S! S"\Rd                  5      r9  SLS#\Rd                  S$\Rt                  S%\Rt                  S&\Rt                  S'\Rt                  S-  S(\;S-  S)\;S*\"\$   4S+ jjr< " S, S-\Rd                  5      r= " S. S/\Rd                  5      r> " S0 S1\5      r? " S2 S3\Rd                  5      r@ " S4 S5\Rd                  5      rA " S6 S7\5      rB " S8 S9\Rd                  5      rC\% " S: S;\5      5       rD  SMS<\E\F\F4   S=\;S>\FS'\RŽ                  S-  S?\FS@\R�                  4SA jjrI\% " SB SC\D5      5       rJ\%" SDSE9 " SF SG\D5      5       rK\%" SHSE9 " SI SJ\D5      5       rL/ SKQrMg)Né    )ÚCallableN)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úfilter_output_hidden_states)Úis_deepspeed_zero3_enabled)Úis_fsdp_managed_module)Úcreate_bidirectional_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚCausalLMOutputÚSequenceClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModelÚ*get_torch_context_manager_or_global_device)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚHubertConfigc                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚHubertPositionalConvEmbeddingé0   c                 ó4  >• [         TU ]  5         [        R                  " UR                  UR                  UR
                  UR
                  S-  UR                  S9U l        S U l        [        USS5      (       a'  [        R                  " UR                  5      U l        GO³[        R                  R                  n[        [        R                  R                  S5      (       a$  [        R                  R                  R                  n[        5       (       Ga%  SS KnUR"                  R%                  U R                  R&                  SS9   U" U R                  SSS	9U l        S S S 5        [        U R                  S
5      (       aU  U R                  R                  R&                  R(                  nU R                  R                  R&                  R*                  nO,U R                  R,                  nU R                  R.                  nUR"                  R1                  X5        UR"                  R1                  X5        OU" U R                  SSS	9U l        [3        UR
                  5      U l        [6        UR8                     U l        g ! , (       d  f       GN,= f)Né   )Úkernel_sizeÚpaddingÚgroupsÚconv_pos_batch_normFÚweight_normr   ©Úmodifier_rankÚweight)ÚnameÚdimÚparametrizations)ÚsuperÚ__init__ÚnnÚConv1dÚhidden_sizeÚnum_conv_pos_embeddingsÚnum_conv_pos_embedding_groupsÚconvÚ
batch_normÚgetattrÚBatchNorm1dÚutilsr'   Úhasattrr-   r	   Ú	deepspeedÚzeroÚGatheredParametersr*   Ú	original0Ú	original1Úweight_gÚweight_vÚregister_external_parameterÚHubertSamePadLayerr$   r   Úfeat_extract_activationÚ
activation)ÚselfÚconfigr'   r;   r@   rA   Ú	__class__s         €Ú¸C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/hubert/modeling_hubert.pyr/   Ú&HubertPositionalConvEmbedding.__init__1   sÎ  ø€ Ü‰ÑÔÜ—I’IØ×ÑØ×ÑØ×6Ñ6Ø×2Ñ2°aÑ7Ø×7Ñ7ñ
ˆŒ	ð ˆŒÜ�6Ð0°%×8Ñ8Ü Ÿnšn¨V×-?Ñ-?Ó@ˆDŽOäŸ(™(×.Ñ.ˆKÜ”r—x‘x×0Ñ0°-×@Ñ@Ü Ÿh™h×7Ñ7×CÑC�ä)×+Ò+Û à—^‘^×6Ñ6°t·y±y×7GÑ7GÐWXÐ6ÒYÙ +¨D¯I©I¸HÈ!Ñ L�D”I÷ Zä˜4Ÿ9™9Ð&8×9Ñ9Ø#Ÿy™y×9Ñ9×@Ñ@×JÑJ�HØ#Ÿy™y×9Ñ9×@Ñ@×JÑJ‘Hà#Ÿy™y×1Ñ1�HØ#Ÿy™y×1Ñ1�HØ—‘×:Ñ:¸4ÔJØ—‘×:Ñ:¸4ÕJá'¨¯	©	¸ÀaÑH�”	ä)¨&×*HÑ*HÓIˆŒÜ  ×!?Ñ!?Ñ@ˆ�÷ ZÖYús   ÅJÊ
Jc                 óð   • UR                  SS5      nU R                  b  U R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nUR                  SS5      nU$ )Nr   r"   )Ú	transposer6   r5   r$   rE   ©rF   Úhidden_statess     rI   ÚforwardÚ%HubertPositionalConvEmbedding.forwardV   sn   € Ø%×/Ñ/°°1Ó5ˆØ�?‰?Ñ&Ø ŸO™O¨MÓ:ˆMØŸ	™	 -Ó0ˆØŸ™ ]Ó3ˆØŸ™¨Ó6ˆà%×/Ñ/°°1Ó5ˆØÐó    )rE   r6   r5   r$   ©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r/   rO   Ú__static_attributes__Ú__classcell__©rH   s   @rI   r   r   0   s   ø† õ#A÷J	ð 	rQ   r   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )rC   éb   c                 óR   >• [         TU ]  5         US-  S:X  a  SU l        g SU l        g )Nr"   r   r   )r.   r/   Únum_pad_remove)rF   r3   rH   s     €rI   r/   ÚHubertSamePadLayer.__init__c   s)   ø€ Ü‰ÑÔØ#:¸QÑ#>À!Ó#C˜aˆÕÈˆÕrQ   c                 óX   • U R                   S:”  a  US S 2S S 2S U R                   * 24   nU$ ©Nr   ©r]   rM   s     rI   rO   ÚHubertSamePadLayer.forwardg   s6   € Ø×Ñ Ó"Ø)ª!ªQÐ0F°4×3FÑ3FÐ2FÐ0FÐ*FÑGˆMØÐrQ   ra   rR   rY   s   @rI   rC   rC   b   s   ø† õK÷ð rQ   rC   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚHubertNoLayerNormConvLayerém   c                 ób  >• [         TU ]  5         US:”  a  UR                  US-
     OSU l        UR                  U   U l        [
        R                  " U R                  U R                  UR                  U   UR                  U   UR                  S9U l
        [        UR                     U l        g )Nr   r   ©r#   ÚstrideÚbias)r.   r/   Úconv_dimÚin_conv_dimÚout_conv_dimr0   r1   Úconv_kernelÚconv_strideÚ	conv_biasr5   r   rD   rE   ©rF   rG   Úlayer_idrH   s      €rI   r/   Ú#HubertNoLayerNormConvLayer.__init__n   s—   ø€ Ü‰ÑÔØ<DÀq»L˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I’IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ñ
ˆŒ	ô ! ×!?Ñ!?Ñ@ˆ�rQ   c                 óJ   • U R                  U5      nU R                  U5      nU$ ©N)r5   rE   rM   s     rI   rO   Ú"HubertNoLayerNormConvLayer.forward|   s$   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØÐrQ   )rE   r5   rk   rl   ©r   rR   rY   s   @rI   rd   rd   m   s   ø† ÷A÷ð rQ   rd   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚHubertLayerNormConvLayeré‚   c                 óª  >• [         TU ]  5         US:”  a  UR                  US-
     OSU l        UR                  U   U l        [
        R                  " U R                  U R                  UR                  U   UR                  U   UR                  S9U l
        [
        R                  " U R                  SS9U l        [        UR                     U l        g )Nr   r   rg   T)Úelementwise_affine)r.   r/   rj   rk   rl   r0   r1   rm   rn   ro   r5   Ú	LayerNormÚ
layer_normr   rD   rE   rp   s      €rI   r/   Ú!HubertLayerNormConvLayer.__init__ƒ   s¯   ø€ Ü‰ÑÔØ<DÀq»L˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I’IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ñ
ˆŒ	ô Ÿ,š, t×'8Ñ'8ÈTÑRˆŒÜ  ×!?Ñ!?Ñ@ˆ�rQ   c                 ó´   • U R                  U5      nUR                  SS5      nU R                  U5      nUR                  SS5      nU R                  U5      nU$ )Néþÿÿÿéÿÿÿÿ)r5   rL   r}   rE   rM   s     rI   rO   Ú HubertLayerNormConvLayer.forward’   sV   € ØŸ	™	 -Ó0ˆà%×/Ñ/°°BÓ7ˆØŸ™¨Ó6ˆØ%×/Ñ/°°BÓ7ˆàŸ™¨Ó6ˆØÐrQ   ©rE   r5   rk   r}   rl   rv   rR   rY   s   @rI   rx   rx   ‚   s   ø† ÷A÷ð rQ   rx   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚHubertGroupNormConvLayeré�   c                 óÀ  >• [         TU ]  5         US:”  a  UR                  US-
     OSU l        UR                  U   U l        [
        R                  " U R                  U R                  UR                  U   UR                  U   UR                  S9U l
        [        UR                     U l        [
        R                  " U R                  U R                  SS9U l        g )Nr   r   rg   T)Ú
num_groupsÚnum_channelsÚaffine)r.   r/   rj   rk   rl   r0   r1   rm   rn   ro   r5   r   rD   rE   Ú	GroupNormr}   rp   s      €rI   r/   Ú!HubertGroupNormConvLayer.__init__ž   s¹   ø€ Ü‰ÑÔØ<DÀq»L˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I’IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ñ
ˆŒ	ô ! ×!?Ñ!?Ñ@ˆŒäŸ,š,°$×2CÑ2CÐRV×RcÑRcÐlpÑqˆ�rQ   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rt   )r5   r}   rE   rM   s     rI   rO   Ú HubertGroupNormConvLayer.forward®   s2   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØÐrQ   rƒ   rv   rR   rY   s   @rI   r…   r…   �   s   ø† ÷r÷ ð rQ   r…   c                   ó8   ^ • \ rS rSrSrU 4S jrS rS rSrU =r	$ )ÚHubertFeatureEncoderéµ   z.Construct the features from raw audio waveformc           	      óÔ  >• [         TU ]  5         UR                  S:X  a@  [        USS9/[	        UR
                  S-
  5       Vs/ s H  n[        XS-   S9PM     sn-   nOVUR                  S:X  a-  [	        UR
                  5       Vs/ s H  n[        XS9PM     nnO[        SUR                   S35      e[        R                  " U5      U l        SU l        S	U l        g s  snf s  snf )
NÚgroupr   )rq   r   Úlayerz`config.feat_extract_norm` is z), but has to be one of ['group', 'layer']FT)r.   r/   Úfeat_extract_normr…   ÚrangeÚnum_feat_extract_layersrd   rx   Ú
ValueErrorr0   Ú
ModuleListÚconv_layersÚgradient_checkpointingÚ_requires_grad)rF   rG   Úirš   rH   s       €rI   r/   ÚHubertFeatureEncoder.__init__¸   sð   ø€ Ü‰ÑÔà×#Ñ# wÓ.Ü3°FÀQÑGÐHÜLQÐRX×RpÑRpÐstÑRtÔLuóLÚLuÀqÔ*¨6À¹EÔBÑLuñLñ ‰Kð ×%Ñ%¨Ó0ÜQVÐW]×WuÑWuÔQvÓwÒQvÈAÔ3°FÔGÑQvˆKÐwˆKäØ0°×1IÑ1IÐ0JÐJsÐtóð ô Ÿ=š=¨Ó5ˆÔØ&+ˆÔ#Ø"ˆÕùòLùò xs   ÁC ÂC%c                 óN   • U R                  5        H
  nSUl        M     SU l        g )NF)Ú
parametersÚrequires_gradrœ   ©rF   Úparams     rI   Ú_freeze_parametersÚ'HubertFeatureEncoder._freeze_parametersÉ   s#   € Ø—_‘_Ö&ˆEØ"'ˆEÖñ 'à#ˆÕrQ   c                 ó    • US S 2S 4   nU R                   (       a  U R                  (       a  SUl        U R                   H  nU" U5      nM     U$ )NT)rœ   Útrainingr¡   rš   )rF   Úinput_valuesrN   Ú
conv_layers       rI   rO   ÚHubertFeatureEncoder.forwardÎ   sK   € Ø$¢Q¨ WÑ-ˆð ×× 4§=§=Ø*.ˆMÔ'à×*Ô*ˆJÙ& }Ó5ŠMñ +ð ÐrQ   )rœ   rš   r›   )
rS   rT   rU   rV   Ú__doc__r/   r¤   rO   rW   rX   rY   s   @rI   r�   r�   µ   s   ø† Ù8õ#ò"$÷

ð 
rQ   r�   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚHubertFeatureProjectionéÛ   c                 óx  >• [         TU ]  5         UR                  U l        U R                  (       a1  [        R                  " UR
                  S   UR                  S9U l        [        R                  " UR
                  S   UR                  5      U l
        [        R                  " UR                  5      U l        g )Nr�   ©Úeps)r.   r/   Úfeat_proj_layer_normr0   r|   rj   Úlayer_norm_epsr}   ÚLinearr2   Ú
projectionÚDropoutÚfeat_proj_dropoutÚdropout©rF   rG   rH   s     €rI   r/   Ú HubertFeatureProjection.__init__Ü   s}   ø€ Ü‰ÑÔØ$*×$?Ñ$?ˆÔ!Ø×$×$Ü Ÿlšl¨6¯?©?¸2Ñ+>ÀF×DYÑDYÑZˆDŒOÜŸ)š) F§O¡O°BÑ$7¸×9KÑ9KÓLˆŒÜ—z’z &×":Ñ":Ó;ˆ�rQ   c                 óŽ   • U R                   (       a  U R                  U5      nU R                  U5      nU R                  U5      nU$ rt   )r²   r}   rµ   r¸   rM   s     rI   rO   ÚHubertFeatureProjection.forwardä   s;   € à×$×$Ø ŸO™O¨MÓ:ˆMØŸ™¨Ó6ˆØŸ™ ]Ó3ˆØÐrQ   )r¸   r²   r}   rµ   rR   rY   s   @rI   r­   r­   Û   s   ø† õ<÷ð rQ   r­   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr¸   Úkwargsc                 óŽ  • Uc  UR                  S5      S-  n[        R                  " XR                  SS5      5      U-  nUb  X„-   n[        R
                  R                  USS9n[        R
                  R                  X†U R                  S9n[        R                  " Xƒ5      n	U	R                  SS5      R                  5       n	X˜4$ )Nr�   ç      à¿r"   r   ©r,   )Úpr§   r   )
ÚsizeÚtorchÚmatmulrL   r0   Ú
functionalÚsoftmaxr¸   r§   Ú
contiguous)
r½   r¾   r¿   rÀ   rÁ   rÂ   r¸   rÃ   Úattn_weightsÚattn_outputs
             rI   Úeager_attention_forwardrÐ   í   s±   € ð �Ø—*‘*˜R“. DÑ(ˆô —<’< §}¡}°Q¸Ó':Ó;¸gÑE€LàÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2Ð(Ð>€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$rQ   c                   ó  ^ • \ rS rSrSr     SS\S\S\S\S\S	\S
\S-  4U 4S jjjr	   SS\
R                  S\
R                  S-  S\
R                  S-  S\S-  S\\   S\\
R                  \
R                  S-  4   4S jjrSrU =r$ )ÚHubertAttentioni	  z=Multi-headed attention from 'Attention Is All You Need' paperNÚ	embed_dimÚ	num_headsr¸   Ú
is_decoderri   Ú	is_causalrG   c                 óæ  >• [         TU ]  5         Xl        X l        X0l        X-  U l        Xpl        U R
                  U-  U R                  :w  a  [        SU R                   SU S35      eU R
                  S-  U l        X@l	        X`l
        [        R                  " XUS9U l        [        R                  " XUS9U l        [        R                  " XUS9U l        [        R                  " XUS9U l        g )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rÅ   )ri   )r.   r/   rÓ   rÔ   r¸   Úhead_dimrG   r˜   rÂ   rÕ   rÖ   r0   r´   Úk_projÚv_projÚq_projÚout_proj)	rF   rÓ   rÔ   r¸   rÕ   ri   rÖ   rG   rH   s	           €rI   r/   ÚHubertAttention.__init__  sÎ   ø€ ô 	‰ÑÔØ"ŒØ"ŒØŒØ!Ñ.ˆŒØŒà�M‰M˜IÑ%¨$¯.©.Ó8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ŒØ"Œä—i’i 	¸4Ñ@ˆŒÜ—i’i 	¸4Ñ@ˆŒÜ—i’i 	¸4Ñ@ˆŒÜŸ	š	 )¸TÑBˆ�rQ   rN   Úkey_value_statesrÁ   Úoutput_attentionsrÃ   Úreturnc                 ó  • USLnUR                   SS n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      n	U(       a  UOUn
/ U
R                   SS QSPU R                  P7nU R                  U
5      R                  U5      R	                  SS5      nU R                  U
5      R                  U5      R	                  SS5      n[        R                  " U R                  R                  [        5      nU" U U	UUU4U R                  (       d  SOU R                  U R                  US.UD6u  nnUR                  " / UQSP76 R!                  5       nU R#                  U5      nUU4$ )z#Input shape: Batch x Time x ChannelNr�   r   r"   ç        )r¸   rÂ   rß   )ÚshaperØ   rÛ   ÚviewrL   rÙ   rÚ   r   Úget_interfacerG   Ú_attn_implementationrÐ   r§   r¸   rÂ   ÚreshaperÍ   rÜ   )rF   rN   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                    rI   rO   ÚHubertAttention.forward+  s†  € ð .°TÐ9Ðð $×)Ñ)¨#¨2Ð.ˆà8˜Ð8 bÐ8¨$¯-©-Ñ8ˆð —{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆæ-?Ñ)À]ˆØB�^×)Ñ)¨#¨2Ð.ÐB°ÐB°D·M±MÑBˆØ—[‘[ Ó0×5Ñ5°hÓ?×IÑIÈ!ÈQÓOˆ
Ø—{‘{ >Ó2×7Ñ7¸ÓA×KÑKÈAÈqÓQˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}Ÿ}‘C°$·,±,Ø—L‘LØ/ñ
%
ð ñ
%
Ñ!ˆ�\ð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆà˜LÐ(Ð(rQ   )rG   r¸   rÓ   rØ   rÖ   rÕ   rÙ   rÔ   rÜ   rÛ   rÂ   rÚ   )râ   FTFN)NNF)rS   rT   rU   rV   r«   ÚintÚfloatÚboolr   r/   rÉ   ÚTensorr   r   ÚtuplerO   rW   rX   rY   s   @rI   rÒ   rÒ   	  sú   ø† ÙGð Ø ØØØ&*ñCàðCð ðCð ð	Cð
 ðCð ðCð ðCð ˜tÑ#÷Cð CðD 15Ø.2Ø).ñ0)à—|‘|ð0)ð  Ÿ,™,¨Ñ-ð0)ð Ÿ™ tÑ+ð	0)ð
   $™;ð0)ð Ð-Ñ.ð0)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷0)ó 0)rQ   rÒ   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚHubertFeedForwardi^  c                 ó  >• [         TU ]  5         [        R                  " UR                  5      U l        [        R                  " UR                  UR                  5      U l	        [        UR                  [        5      (       a  [        UR                     U l        OUR                  U l        [        R                  " UR                  UR                  5      U l        [        R                  " UR                   5      U l        g rt   )r.   r/   r0   r¶   Úactivation_dropoutÚintermediate_dropoutr´   r2   Úintermediate_sizeÚintermediate_denseÚ
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnÚoutput_denseÚhidden_dropoutÚoutput_dropoutr¹   s     €rI   r/   ÚHubertFeedForward.__init___  s®   ø€ Ü‰ÑÔÜ$&§J¢J¨v×/HÑ/HÓ$IˆÔ!ä"$§)¢)¨F×,>Ñ,>À×@XÑ@XÓ"YˆÔÜ�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÔ$äŸIšI f×&>Ñ&>À×@RÑ@RÓSˆÔÜ Ÿjšj¨×)>Ñ)>Ó?ˆÕrQ   c                 ó°   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU$ rt   )rý   r  rû   r  r  rM   s     rI   rO   ÚHubertFeedForward.forwardl  sX   € Ø×/Ñ/°Ó>ˆØ×0Ñ0°Ó?ˆØ×1Ñ1°-Ó@ˆà×)Ñ)¨-Ó8ˆØ×+Ñ+¨MÓ:ˆØÐrQ   )r  rý   rû   r  r  rR   rY   s   @rI   rø   rø   ^  s   ø† õ@÷ð rQ   rø   c                   óx   ^ • \ rS rSrU 4S jr S	S\R                  S\R                  S-  S\\   4S jjr	Sr
U =r$ )
ÚHubertEncoderLayeriv  c                 ó¤  >• [         TU ]  5         [        UR                  UR                  UR
                  SUS9U l        [        R                  " UR                  5      U l
        [        R                  " UR                  UR                  S9U l        [        U5      U l        [        R                  " UR                  UR                  S9U l        g )NF©rÓ   rÔ   r¸   rÕ   rG   r°   )r.   r/   rÒ   r2   Únum_attention_headsÚattention_dropoutÚ	attentionr0   r¶   r  r¸   r|   r³   r}   rø   Úfeed_forwardÚfinal_layer_normr¹   s     €rI   r/   ÚHubertEncoderLayer.__init__w  s�   ø€ Ü‰ÑÔÜ(Ø×(Ñ(Ø×0Ñ0Ø×,Ñ,ØØñ
ˆŒô —z’z &×"7Ñ"7Ó8ˆŒÜŸ,š, v×'9Ñ'9¸v×?TÑ?TÑUˆŒÜ-¨fÓ5ˆÔÜ "§¢¨V×-?Ñ-?ÀV×EZÑEZÑ [ˆÕrQ   NrN   rÁ   rÃ   c                 óÌ   • UnU R                   " U4SU0UD6u  pU R                  U5      nXA-   nU R                  U5      nXR                  U5      -   nU R	                  U5      nU$ ©NrÁ   )r  r¸   r}   r  r  ©rF   rN   rÁ   rÃ   Úattn_residualÚ_s         rI   rO   ÚHubertEncoderLayer.forward†  sr   € ð &ˆØŸ>š>¨-ÑaÈÐaÐZ`ÑaÑˆØŸ™ ]Ó3ˆØ%Ñ5ˆàŸ™¨Ó6ˆØ%×(9Ñ(9¸-Ó(HÑHˆØ×-Ñ-¨mÓ<ˆàÐrQ   )r  r¸   r  r  r}   rt   ©rS   rT   rU   rV   r/   rÉ   rõ   r   r   rO   rW   rX   rY   s   @rI   r	  r	  v  sG   ø† õ\ð$ /3ñà—|‘|ðð Ÿ™ tÑ+ðð Ð+Ñ,÷	ó rQ   r	  c                   óx   ^ • \ rS rSrU 4S jr S	S\R                  S\R                  S-  S\\	   4S jjr
SrU =r$ )
ÚHubertEncoderi˜  c                 óœ  >• [         TU ]  5         Xl        [        U5      U l        [
        R                  " UR                  UR                  S9U l	        [
        R                  " UR                  5      U l        [
        R                  " [        UR                  5       Vs/ s H  n[!        U5      PM     sn5      U l        SU l        g s  snf ©Nr°   F)r.   r/   rG   r   Úpos_conv_embedr0   r|   r2   r³   r}   r¶   r  r¸   r™   r–   Únum_hidden_layersr	  Úlayersr›   ©rF   rG   r  rH   s      €rI   r/   ÚHubertEncoder.__init__™  s”   ø€ Ü‰ÑÔØŒÜ;¸FÓCˆÔÜŸ,š, v×'9Ñ'9¸v×?TÑ?TÑUˆŒÜ—z’z &×"7Ñ"7Ó8ˆŒÜ—m’mÌÈv×OgÑOgÔIhÓ$iÒIhÀAÔ%7¸Ö%?ÑIhÑ$iÓjˆŒØ&+ˆÕ#ùò %jó   Â C	NrN   rÁ   rÃ   c                 ób  • Ub4  UR                  S5      R                  SSUR                  S   5      nSX) '   [        U R                  UUS9nU R                  U5      nXR                  UR                  5      -   nU R                  U5      nU R                  U5      n[        5       =(       d    [        U 5      nU R                   H_  n[        R                  " / 5      nU R                  =(       a    X€R                  R                   :  n	U	(       a	  U(       d  MT  U" U4SU0UD6nMa     [#        US9$ ©Nr�   r   r"   r   )rG   Úinputs_embedsrÁ   rÁ   )Úlast_hidden_state)Ú	unsqueezeÚrepeatrã   r   rG   r  ÚtoÚdevicer}   r¸   r	   r
   r  rÉ   Úrandr§   Ú	layerdropr   ©
rF   rN   rÁ   rÃ   Úexpand_attention_maskÚposition_embeddingsÚsynced_gpusr”   Údropout_probabilityÚskip_the_layers
             rI   rO   ÚHubertEncoder.forward¢  s  € ð Ñ%à$2×$<Ñ$<¸RÓ$@×$GÑ$GÈÈ1Èm×NaÑNaÐbcÑNdÓ$eÐ!Ø45ˆMÐ0Ñ1ä2Ø—;‘;Ø'Ø)ñ
ˆð #×1Ñ1°-Ó@ÐØ%×(>Ñ(>¸}×?SÑ?SÓ(TÑTˆØŸ™¨Ó6ˆØŸ™ ]Ó3ˆä0Ó2×RÔ6LÈTÓ6Rˆà—[”[ˆEä"'§*¢*¨R£.Ðà!Ÿ]™]×ZÐ/BÇ[Á[×EZÑEZÑ/ZˆNÞ!§[ [á % mÑ ]ÀNÐ ]ÐV\Ñ ]’ñ !ô °Ñ?Ð?rQ   ©rG   r¸   r›   r}   r  r  rt   )rS   rT   rU   rV   r/   rÉ   Útensorrõ   r   r   rO   rW   rX   rY   s   @rI   r  r  ˜  sK   ø† õ,ð /3ñ!@à—|‘|ð!@ð Ÿ™ tÑ+ð!@ð Ð+Ñ,÷	!@ó !@rQ   r  c                   óJ   ^ • \ rS rSrU 4S jrS\R                  4S jrSrU =r	$ )ÚHubertAttnAdapterLayeriÆ  c                 ó¤  >• [         TU ]  5         UR                  U l        UR                  U l        [        R                  " U R
                  5      U l        [        R                  " U R
                  U R                  5      U l
        [        R                  " 5       U l        [        R                  " U R                  U R
                  5      U l        g)z‡
Implements adapter modules directly with 3D tensor weight as parameters and without using ModuleList to speed
up training throughput.
N)r.   r/   Úadapter_attn_dimÚ	input_dimr2   Ú
hidden_dimr0   r|   Únormr´   Úlinear_1ÚReLUÚact_fnÚlinear_2r¹   s     €rI   r/   ÚHubertAttnAdapterLayer.__init__Ç  s   ø€ ô
 	‰ÑÔØ×0Ñ0ˆŒØ ×,Ñ,ˆŒä—L’L §¡Ó1ˆŒ	ÜŸ	š	 $§/¡/°4·>±>ÓBˆŒÜ—g’g“iˆŒÜŸ	š	 $§.¡.°$·/±/ÓBˆ�rQ   rN   c                 óŽ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ rt   )r<  r=  r?  r@  rM   s     rI   rO   ÚHubertAttnAdapterLayer.forwardÕ  s@   € ØŸ	™	 -Ó0ˆàŸ™ mÓ4ˆØŸ™ MÓ2ˆØŸ™ mÓ4ˆàÐrQ   )r?  r;  r:  r=  r@  r<  )
rS   rT   rU   rV   r/   rÉ   ÚFloatTensorrO   rW   rX   rY   s   @rI   r7  r7  Æ  s    ø† õCð U×%6Ñ%6÷ ò rQ   r7  c                   óx   ^ • \ rS rSrU 4S jr S	S\R                  S\R                  S-  S\\   4S jjr	Sr
U =r$ )
Ú!HubertEncoderLayerStableLayerNormiß  c                 óð  >• [         TU ]  5         [        UR                  UR                  UR
                  SUS9U l        [        R                  " UR                  5      U l
        [        R                  " UR                  UR                  S9U l        [        U5      U l        [        R                  " UR                  UR                  S9U l        [#        USS 5      b  [%        U5      U l        g S U l        g )NFr  r°   r9  )r.   r/   rÒ   r2   r  r  r  r0   r¶   r  r¸   r|   r³   r}   rø   r  r  r7   r7  Úadapter_layerr¹   s     €rI   r/   Ú*HubertEncoderLayerStableLayerNorm.__init__à  sÂ   ø€ Ü‰ÑÔÜ(Ø×(Ñ(Ø×0Ñ0Ø×,Ñ,ØØñ
ˆŒô —z’z &×"7Ñ"7Ó8ˆŒÜŸ,š, v×'9Ñ'9¸v×?TÑ?TÑUˆŒÜ-¨fÓ5ˆÔÜ "§¢¨V×-?Ñ-?ÀV×EZÑEZÑ [ˆÔä�6Ð-¨tÓ4Ñ@Ü!7¸Ó!?ˆDÕà!%ˆDÕrQ   NrN   rÁ   rÃ   c                 ó  • UnU R                  U5      nU R                  " U4SU0UD6u  pU R                  U5      nXA-   nXR                  U R	                  U5      5      -   nU R
                  b  XR                  U5      -   nU$ r  )r}   r  r¸   r  r  rH  r  s         rI   rO   Ú)HubertEncoderLayerStableLayerNorm.forwardó  s�   € ð &ˆØŸ™¨Ó6ˆØŸ>š>¨-ÑaÈÐaÐZ`ÑaÑˆØŸ™ ]Ó3ˆØ%Ñ5ˆØ%×(9Ñ(9¸$×:OÑ:OÐP]Ó:^Ó(_Ñ_ˆà×ÑÑ)Ø)×,>Ñ,>¸}Ó,MÑMˆMàÐrQ   )rH  r  r¸   r  r  r}   rt   r  rY   s   @rI   rF  rF  ß  sF   ø† õ&ð, /3ñà—|‘|ðð Ÿ™ tÑ+ðð Ð+Ñ,÷	ó rQ   rF  c                   óB   ^ • \ rS rSrU 4S jr SS\\   4S jjrSrU =r	$ )ÚHubertEncoderStableLayerNormi  c                 óœ  >• [         TU ]  5         Xl        [        U5      U l        [
        R                  " UR                  UR                  S9U l	        [
        R                  " UR                  5      U l        [
        R                  " [        UR                  5       Vs/ s H  n[!        U5      PM     sn5      U l        SU l        g s  snf r  )r.   r/   rG   r   r  r0   r|   r2   r³   r}   r¶   r  r¸   r™   r–   r  rF  r  r›   r   s      €rI   r/   Ú%HubertEncoderStableLayerNorm.__init__  s™   ø€ Ü‰ÑÔØŒÜ;¸FÓCˆÔÜŸ,š, v×'9Ñ'9¸v×?TÑ?TÑUˆŒÜ—z’z &×"7Ñ"7Ó8ˆŒÜ—m’mÜ@EÀf×F^ÑF^Ô@_Ó`Ò@_¸1Ô.¨vÖ6Ñ@_Ñ`ó
ˆŒð ',ˆÕ#ùò ar"  rÃ   c                 ó0  • Ub4  UR                  S5      R                  SSUR                  S   5      nSX) '   [        U R                  UUS9nU R                  U5      nX-   nU R                  U5      n[        5       =(       d    [        U 5      nU R                   H_  n[        R                  " / 5      nU R                  =(       a    X€R                  R                  :  n	U	(       a	  U(       d  MT  U" U4SU0UD6nMa     U R                  U5      n[        US9$ r$  )r'  r(  rã   r   rG   r  r¸   r	   r
   r  rÉ   r+  r§   r,  r}   r   r-  s
             rI   rO   Ú$HubertEncoderStableLayerNorm.forward  s  € ð Ñ%à$2×$<Ñ$<¸RÓ$@×$GÑ$GÈÈ1Èm×NaÑNaÐbcÑNdÓ$eÐ!Ø45ˆMÐ0Ñ1ä2Ø—;‘;Ø'Ø)ñ
ˆð #×1Ñ1°-Ó@ÐØ%Ñ;ˆØŸ™ ]Ó3ˆä0Ó2×RÔ6LÈTÓ6Rˆà—[”[ˆEä"'§*¢*¨R£.Ðà!Ÿ]™]×ZÐ/BÇ[Á[×EZÑEZÑ/ZˆNÞ!§[ [ñ !& mÑ ]ÀNÐ ]ÐV\Ñ ]’ñ !ð Ÿ™¨Ó6ˆä°Ñ?Ð?rQ   r4  rt   )
rS   rT   rU   rV   r/   r   r   rO   rW   rX   rY   s   @rI   rM  rM    s*   ø† õ	,ð ñ#@ð Ð+Ñ,÷	#@ó #@rQ   rM  c                   óè   ^ • \ rS rSr% \\S'   SrSrSrSS/r	Sr
SrSrSr\\/\" \S	S
S9S.r\R(                  " 5       U 4S j5       rS\R,                  \-  4S jrS\S\R,                  4S jrSrU =r$ )ÚHubertPreTrainedModeli8  rG   Úhubertr¨   Úaudior	  ÚParametrizedConv1dTr   Úencoder)ÚindexÚ
layer_name)rN   Ú
attentionsc                 óV  >• [         TU ]  U5        [        U[        R                  5      (       Ga,  [        5       (       aÎ  SSKn[        US5      (       ak  [        US5      (       aZ  UR                  R                  UR                  UR                  /SS9   [        R                  " UR                  5        SSS5        OnUR                  R                  UR                  SS9   [        R                  " UR                  5        SSS5        O [        R                  " UR                  5        UR                  b!  [        R                   " UR                  5        gg[        U["        5      (       a3  [        US5      (       a!  [        R$                  " UR&                  5        gg[        U[(        5      (       aN  [        US5      (       a<  [        R*                  " UR,                  SU R.                  R0                  S	-   -  5        ggg! , (       d  f       Né= f! , (       d  f       Nú= f)
zInitialize the weightsr   NrA   r@   r(   Úmasked_spec_embedÚlayer_weightsg      ð?r   )r.   Ú_init_weightsrþ   r0   r1   r	   r;   r:   r<   r=   rA   r@   ÚinitÚkaiming_normal_r*   ri   Úzeros_ÚHubertModelÚuniform_r\  ÚHubertForSequenceClassificationÚ	constant_r]  rG   r  )rF   r½   r;   rH   s      €rI   r^  Ú#HubertPreTrainedModel._init_weightsH  s‰  ø€ ô 	‰Ñ˜fÔ%Ü�fœbŸi™i×(Ò(Ü)×+Ñ+Û ä˜6 :×.Ñ.´7¸6À:×3NÑ3NØ"Ÿ™×:Ñ:¸F¿O¹OÈVÏ_É_Ð;]ÐmnÐ:ÒoÜ×,Ò,¨V¯]©]Ô;÷ pÐoð #Ÿ™×:Ñ:¸6¿=¹=ÐXYÐ:ÒZÜ×,Ò,¨V¯]©]Ô;÷ [ÐZô ×$Ò$ V§]¡]Ô3à�{‰{Ñ&Ü—’˜FŸK™KÕ(ð 'ä˜¤×,Ñ,Ü�vÐ2×3Ñ3Ü—’˜f×6Ñ6Õ7ð 4ä˜Ô ?×@Ñ@Ü�v˜×/Ñ/Ü—’˜v×3Ñ3°S¸D¿K¹K×<YÑ<YÐ\]Ñ<]Ñ5^Õ_ð 0ð A÷ pÕoú÷ [ÕZús   Â!H	Ã$!HÈ	
HÈ
H(Úinput_lengthsc                 ó˜   • S n[        U R                  R                  U R                  R                  5       H  u  p4U" XU5      nM     U$ )z8
Computes the output length of the convolutional layers
c                 ó8   • [         R                  " X-
  USS9S-   $ )NÚfloor)Úrounding_moder   )rÉ   Údiv)Úinput_lengthr#   rh   s      rI   Ú_conv_out_lengthÚPHubertPreTrainedModel._get_feat_extract_output_lengths.<locals>._conv_out_lengthg  s    € ô —9’9˜\Ñ7¸ÈwÑWÐZ[Ñ[Ð[rQ   )ÚziprG   rm   rn   )rF   rg  rn  r#   rh   s        rI   Ú _get_feat_extract_output_lengthsÚ6HubertPreTrainedModel._get_feat_extract_output_lengthsb  sG   € ò
	\ô
 $' t§{¡{×'>Ñ'>ÀÇÁ×@WÑ@WÖ#XÑˆKÙ,¨]ÈÓPŠMñ $Yð ÐrQ   Úfeature_vector_lengthrÁ   c                 óÚ  • U R                  UR                  S5      5      R                  [        R                  5      nUR
                  S   n[        R                  " XA4UR                  UR                  S9nSU[        R                  " UR
                  S   UR                  S9US-
  4'   UR                  S/5      R                  S5      R                  S/5      R                  5       nU$ )Nr�   r   )Údtyper*  r   )r*  )rq  Úsumr)  rÉ   Úlongrã   Úzerosru  r*  ÚarangeÚflipÚcumsumrô   )rF   rs  rÁ   Úoutput_lengthsÚ
batch_sizes        rI   Ú"_get_feature_vector_attention_maskÚ8HubertPreTrainedModel._get_feature_vector_attention_maskq  sÔ   € Ø×>Ñ>¸~×?QÑ?QÐRTÓ?UÓV×YÑYÔZ_×ZdÑZdÓeˆØ#×)Ñ)¨!Ñ,ˆ
äŸšØÐ/°~×7KÑ7KÐTb×TiÑTiñ
ˆð uvˆœŸš ^×%9Ñ%9¸!Ñ%<À^×EZÑEZÑ[Ð]kÐnoÑ]oÐpÑqØ'×,Ñ,¨b¨TÓ2×9Ñ9¸"Ó=×BÑBÀBÀ4ÓH×MÑMÓOˆØÐrQ   © )rS   rT   rU   rV   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnr	  rF  r   rÒ   Ú_can_record_outputsrÉ   Úno_gradr^  Ú
LongTensorrò   rq  r~  rW   rX   rY   s   @rI   rS  rS  8  s­   ø‡ àÓØ ÐØ$€OØÐØ-Ð/CÐDÐØ&*Ð#ØÐØ€NØÐà,Ð.OÐPÙ$ _¸AÈ)ÑTñÐð
 ‡]‚]ƒ_ô`ó ð`ð2¸e×>NÑ>NÐQTÑ>Tô ð
Èð 
Ð]b×]mÑ]m÷ 
ò 
rQ   rS  rã   Ú	mask_probÚmask_lengthÚ	min_masksrà   c           	      óê  ^^^^^• U u  nmTS:  a  [        S5      eTT:”  a  [        ST ST S35      e[        R                  R                  S5      R	                  5       mUUUUU4S jnUb-  UR                  5       R                  S5      R                  5       O[        U5       Vs/ s H  nTPM     snn[        R                  " UT4[        S	9n	/ n
U" T5      nUS
:X  a  U	$ U H­  nU" U5      n[        R                  R                  [        R                  " UTS-
  -
  5      USS9n[        U5      S
:X  a  TS-
  nOUS
   n[        R                  " U[        R                  " X½-
  [        R                   S	9U-  /5      nU
R#                  U5        M¯     [        R$                  " U
5      n
[        R&                  " U
SS2SS2S4   X[T45      n
U
R)                  X[T-  5      n
[        R                  " T5      SSSS24   n[        R&                  " UX[T45      R)                  X[T-  5      nU
U-   n
U
R+                  5       TS-
  :”  a  TS-
  XªTS-
  :„  '   [        R,                  " XšSS5        U	$ s  snf )a2  
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U -  T-  T-   5      n[        UT5      nUT-  T:”  a  TT-  nU TS-
  -
  U:  a  [        U TS-
  -
  S5      nU$ )z;Given input length, compute how many spans should be maskedr   r   )rò   Úmax)rm  Únum_masked_spanÚepsilonrŽ  r�  r�  Úsequence_lengths     €€€€€rI   Úcompute_num_masked_spanÚ6_compute_mask_indices.<locals>.compute_num_masked_span¤  so   ø€ ä˜i¨,Ñ6¸ÑDÀwÑNÓOˆÜ˜o¨yÓ9ˆð ˜[Ñ(¨?Ó:Ø-°Ñ<ˆOð ˜;¨™?Ñ+¨oÓ=Ü! ,°+À±/Ñ"BÀAÓFˆOàÐrQ   Nr�   ©ru  r   F)Úreplace)r˜   ÚnpÚrandomr+  ÚitemÚdetachrv  Útolistr–   rx  rô   Úchoicery  ÚlenÚconcatenateÚonesÚint32ÚappendÚarrayÚbroadcast_torç   r“  Úput_along_axis)rã   r�  rŽ  rÁ   r�  r}  r—  r  rg  Úspec_aug_maskÚspec_aug_mask_idxsÚmax_num_masked_spanrm  r”  Úspec_aug_mask_idxÚdummy_mask_idxÚoffsetsr•  r–  s    `` `            @@rI   Ú_compute_mask_indicesr¯  ~  sš  ü€ ð0 #(Ñ€J�à�QƒÜÐAÓBÐBà�_Ó$ÜØ]Ð^iÐ]jØ& Ð&7°qð:ó
ð 	
ô �i‰i�n‰n˜QÓ×$Ñ$Ó&€G÷ñ ð$ Ñ%ð 	×ÑÓ×#Ñ# BÓ'×.Ñ.Ô0ä',¨ZÔ'8Ó9Ò'8 !‹oÑ'8Ñ9ð ô —H’H˜j¨/Ð:Ä$ÑG€MØÐá1°/ÓBÐà˜aÓØÐã%ˆá1°,Ó?ˆô ŸI™I×,Ñ,Ü�IŠI�l k°A¡oÑ6Ó7¸ÐRWð -ð 
Ðô Ð Ó! QÓ&ð -¨qÑ0‰Nà.¨qÑ1ˆNäŸNšNØ¤§¢Ð(;Ñ(MÔUW×U]ÑU]Ñ ^ÐaoÑ oÐpó
Ðð 	×!Ñ!Ð"3Ö4ñ/ &ô2 ŸšÐ"4Ó5Ðô ŸšØš1ša ˜:Ñ&¨È+Ð(VóÐð ,×3Ñ3°JÐVaÑ@aÓbÐô �iŠi˜Ó$ T¨4² ]Ñ3€GÜ�oŠo˜g¨
ÈÐ'UÓV×^Ñ^Ø¨+Ñ5ó€Gð ,¨gÑ5Ðð ×ÑÓ /°AÑ"5Ó5ØGVÐYZÑGZÐ°À!Ñ0CÑCÑDô ×Ò�m¸¸BÔ?àÐùòw :s   Â(I0c                   óV  ^ • \ rS rSrS\4U 4S jjr  SS\R                  S\R                  S-  S\R                  S-  4S jjr	\
\" S	S
9\     SS\R                  S-  S\R                  S-  S\R                  S-  S\S-  S\S-  S\S-  S\\-  4S jj5       5       5       rSrU =r$ )rb  iõ  rG   c                 óÂ  >• [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        UR                  S:”  d  UR                  S:”  aG  [        R                  " [        R                  " UR                  5      R                  5       5      U l        UR                   (       a  [#        U5      U l        O['        U5      U l        U R)                  5         g ©Nrâ   )r.   r/   rG   r�   Úfeature_extractorr­   Úfeature_projectionÚmask_time_probÚmask_feature_probr0   Ú	ParameterrÉ   rõ   r2   rc  r\  Údo_stable_layer_normrM  rW  r  Ú	post_initr¹   s     €rI   r/   ÚHubertModel.__init__÷  s¢   ø€ Ü‰Ñ˜Ô ØŒÜ!5°fÓ!=ˆÔÜ"9¸&Ó"AˆÔð × Ñ  3Ó&¨&×*BÑ*BÀSÓ*HÜ%'§\¢\´%·,²,¸v×?QÑ?QÓ2R×2[Ñ2[Ó2]Ó%^ˆDÔ"à×&×&Ü7¸Ó?ˆD�Lä(¨Ó0ˆDŒLð 	�‰ÕrQ   NrN   Úmask_time_indicesrÁ   c                 óÎ  • [        U R                  SS5      (       d  U$ UR                  5       u  pEnUb(  U R                  R	                  UR
                  5      X'   OÉU R                  R                  S:”  a¯  U R                  (       až  [        XE4U R                  R                  U R                  R                  UU R                  R                  S9n[        R                  " X!R                  [        R                  S9nU R                  R	                  UR
                  5      X'   U R                  R                  S:”  a¥  U R                  (       a”  [        XF4U R                  R                  U R                  R                   U R                  R"                  S9n[        R                  " XqR                  [        R                  S9nUSS2S4   R%                  SUS5      nSX'   U$ )	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*  ru  )r�  rŽ  r�  r�   )r7   rG   rÈ   r\  r)  ru  rµ  r§   r¯  Úmask_time_lengthÚmask_time_min_masksrÉ   r5  r*  rô   r¶  Úmask_feature_lengthÚmask_feature_min_masksÚexpand)rF   rN   r»  rÁ   r}  r–  r2   Úmask_feature_indicess           rI   Ú_mask_hidden_statesÚHubertModel._mask_hidden_states	  sŠ  € ô �t—{‘{Ð$8¸$×?Ñ?Ø Ð ð 4A×3EÑ3EÓ3GÑ0ˆ
 [àÑ(à/3×/EÑ/E×/HÑ/HÈ×I\ÑI\Ó/]ˆMÒ,Ø�[‰[×'Ñ'¨!Ó+°··Ü 5ØÐ-ØŸ+™+×4Ñ4Ø ŸK™K×8Ñ8Ø-ØŸ+™+×9Ñ9ñ!Ðô !&§¢Ð->×G[ÑG[Ôch×cmÑcmÑ nÐØ/3×/EÑ/E×/HÑ/HÈ×I\ÑI\Ó/]ˆMÑ,à�;‰;×(Ñ(¨1Ó,°··ä#8ØÐ)ØŸ+™+×7Ñ7Ø ŸK™K×;Ñ;ØŸ+™+×<Ñ<ñ	$Ð ô $)§<¢<Ð0D×MaÑMaÔin×isÑisÑ#tÐ Ø#7º¸4¸Ñ#@×#GÑ#GÈÈOÐ]_Ó#`Ð Ø23ˆMÑ/àÐrQ   F)Útie_last_hidden_statesr¨   rß   Úoutput_hidden_statesÚreturn_dictrà   c                 óü  • Ub  UOU R                   R                  nUb  UOU R                   R                  nUb  UOU R                   R                  nU R	                  U5      nUR                  SS5      nUb  U R                  UR                  S   U5      nU R                  U5      n	U R                  X“S9n	U R                  U	UUUUS9n
U
S   n	U(       d	  U	4U
SS -   $ [        U	U
R                  U
R                  S9$ )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.

Example:

```python
>>> from transformers import AutoProcessor, HubertModel
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("facebook/hubert-large-ls960-ft")
>>> model = HubertModel.from_pretrained("facebook/hubert-large-ls960-ft")


>>> def map_to_array(example):
...     example["speech"] = example["audio"]["array"]
...     return example


>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> ds = ds.map(map_to_array)

>>> input_values = processor(ds["speech"][0], return_tensors="pt").input_values  # Batch size 1
>>> hidden_states = model(input_values).last_hidden_state
```Nr   r"   )r»  )rÁ   rß   rÇ  rÈ  r   )r&  rN   rZ  )rG   rß   rÇ  rÈ  r³  rL   r~  rã   r´  rÄ  rW  r   rN   rZ  )rF   r¨   rÁ   r»  rß   rÇ  rÈ  rÃ   Úextract_featuresrN   Úencoder_outputss              rI   rO   ÚHubertModel.forward7  s)  € ðN 2CÑ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ñ$DÑ È$Ï+É+×JjÑJjð 	ð &1Ñ%<‘kÀ$Ç+Á+×BYÑBYˆà×1Ñ1°,Ó?ÐØ+×5Ñ5°a¸Ó;ÐàÑ%à!×DÑDÐEU×E[ÑE[Ð\]ÑE^Ð`nÓoˆNà×/Ñ/Ð0@ÓAˆØ×0Ñ0°Ð0ÐdˆàŸ,™,ØØ)Ø/Ø!5Ø#ð 'ð 
ˆð (¨Ñ*ˆæØ!Ð# o°a°bÐ&9Ñ9Ð9äØ+Ø)×7Ñ7Ø&×1Ñ1ñ
ð 	
rQ   )rG   rW  r³  r´  r\  ©NN)NNNNN)rS   rT   rU   rV   r   r/   rÉ   rD  rŒ  rÄ  r   r   r   rõ   rô   rö   r   rO   rW   rX   rY   s   @rI   rb  rb  õ  s
  ø† ð˜|÷ ð* 7;Ø26ñ	,à×(Ñ(ð,ð !×,Ñ,¨tÑ3ð,ð ×(Ñ(¨4Ñ/õ	,ð\  Ù¨EÑ2Øð /3Ø6:Ø)-Ø,0Ø#'ñE
à—l‘l TÑ)ðE
ð Ÿ™ tÑ+ðE
ð !×,Ñ,¨tÑ3ð	E
ð
   $™;ðE
ð # T™kðE
ð ˜D‘[ðE
ð 
�Ñ	 ôE
ó ó 3ó  öE
rQ   rb  zn
    Hubert Model with a `language modeling` head on top for Connectionist Temporal Classification (CTC).
    )Úcustom_introc                   óà   ^ • \ rS rSrSS\S-  4U 4S jjjrS rS rS r\	\
  SS\R                  S-  S	\R                  S-  S
\R                  S-  S\\   S\\-  4
S jj5       5       rSrU =r$ )ÚHubertForCTCi‚  NÚtarget_langc                 óÄ  >• [         TU ]  U5        [        U5      U l        [        R
                  " UR                  5      U l        X l        UR                  c  [        SU R                   S35      e[        US5      (       a  UR                  (       a  UR                  OUR                  n[        R                   " X1R                  5      U l        U R%                  5         g)a  
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 [`HubertForCTC`] 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: `HubertForCTC.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.Úadd_adapter)r.   r/   rb  rT  r0   r¶   Úfinal_dropoutr¸   rÑ  Ú
vocab_sizer˜   rH   r:   rÓ  Úoutput_hidden_sizer2   r´   Úlm_headr¹  )rF   rG   rÑ  rÖ  rH   s       €rI   r/   ÚHubertForCTC.__init__ˆ  s¾   ø€ ô 	‰Ñ˜Ô ä! &Ó)ˆŒÜ—z’z &×"6Ñ"6Ó7ˆŒà&Ôà×ÑÑ$ÜØ0°·±Ð0@ð AHð Hóð ô *1°¸×)GÑ)GÈF×L^×L^ˆF×%Ò%Ðdj×dvÑdvð 	ô —y’yÐ!3×5FÑ5FÓGˆŒð 	�‰ÕrQ   c                 ó@  • [        5       [        R                  " S5      :X  a  gU R                  nUb'  [	        U R
                  SS5      c  [        SU S35      eUc.  [	        U R
                  SS5      b  [        R                  S5        gUb  U R                  USS9  gg)	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.
ÚmetaNr9  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Ñ  r7   rG   r˜   ÚloggerÚinfoÚload_adapter)rF   rÃ   rÑ  s      rI   Útie_weightsÚHubertForCTC.tie_weights¥  sœ   € ô 6Ó7¼5¿<º<ÈÓ;OÓOØð ×&Ñ&ˆàÑ"¤w¨t¯{©{Ð<NÐPTÓ'UÑ']ÜÐ:¸;¸-ÐGtÐuÓvÐvØÑ ¤W¨T¯[©[Ð:LÈdÓ%SÑ%_Ü�K‰KÐCÕDØÑ$Ø×Ñ˜k°dÐÒ;ð %rQ   c                 óL   • U R                   R                  R                  5         g©z�
Calling this function will disable the gradient computation for the feature encoder so that its parameter will
not be updated during training.
N©rT  r³  r¤   ©rF   s    rI   Úfreeze_feature_encoderÚ#HubertForCTC.freeze_feature_encoder½  ó   € ð
 	�‰×%Ñ%×8Ñ8Õ:rQ   c                 óT   • U R                   R                  5        H
  nSUl        M     g©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©rT  r    r¡   r¢   s     rI   Úfreeze_base_modelÚHubertForCTC.freeze_base_modelÄ  ó#   € ð
 —[‘[×+Ñ+Ö-ˆEØ"'ˆEÖò .rQ   r¨   rÁ   ÚlabelsrÃ   rà   c                 ó>  • UbJ  UR                  5       U R                  R                  :¼  a"  [        SU R                  R                   35      eU R                  " U4SU0UD6nUR
                  nU R                  U5      nU R                  U5      nSnUGbX  Ub  UO"[        R                  " U[        R                  S9nU R                  UR                  S5      5      R                  [        R                  5      n	US:¬  n
U
R                  S5      nUR                  U
5      n[        R                   R#                  US[        R$                  S9R'                  SS5      n[        R(                  R*                  R-                  S	S
9   [        R                   R/                  UUU	UU R                  R0                  U R                  R2                  U R                  R4                  S9nSSS5        [7        X‡UR8                  UR:                  S9$ ! , (       d  f       N-= f)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�   r   )r,   ru  r   F)Úenabled)ÚblankÚ	reductionÚzero_infinity©ÚlossÚlogitsrN   rZ  )r“  rG   rÕ  r˜   rT  r&  r¸   r×  rÉ   Ú	ones_likerw  rq  rv  r)  Úmasked_selectr0   rË   Úlog_softmaxÚfloat32rL   ÚbackendsÚcudnnÚflagsÚctc_lossÚpad_token_idÚctc_loss_reductionÚctc_zero_infinityr   rN   rZ  )rF   r¨   rÁ   rî  rÃ   ÚoutputsrN   rö  rõ  rg  Úlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probss                 rI   rO   ÚHubertForCTC.forwardÌ  sÜ  € ð  Ñ &§*¡*£,°$·+±+×2HÑ2HÓ"HÜÐCÀDÇKÁK×DZÑDZÐC[Ð\Ó]Ð]à—+’+Øñ
à)ð
ð ñ
ˆð  ×1Ñ1ˆØŸ™ ]Ó3ˆà—‘˜mÓ,ˆàˆØÒð #1Ñ"<‘Ä%Ç/Â/ÐR^Ôfk×fpÑfpÑBqð ð !×AÑAÀ.×BTÑBTÐUWÓBXÓY×\Ñ\Ô]b×]gÑ]gÓhˆMð ! A™+ˆKØ(Ÿ_™_¨RÓ0ˆNØ &× 4Ñ 4°[Ó AÐô Ÿ™×1Ñ1°&¸bÌÏÉÐ1ÐV×`Ñ`ÐabÐdeÓfˆIä—‘×%Ñ%×+Ñ+°EÐ+Ò:Ü—}‘}×-Ñ-ØØ%Ø!Ø"ØŸ+™+×2Ñ2Ø"Ÿk™k×<Ñ<Ø"&§+¡+×"?Ñ"?ð .ð �÷ ;ô Ø°G×4IÑ4IÐV]×VhÑVhñ
ð 	
÷ ;Õ:ús   ÆA HÈ
H)r¸   rT  r×  rÑ  rt   rÍ  )rS   rT   rU   rV   r   r/   rß  rå  rë  r   r   rÉ   rõ   r   r   rö   r   rO   rW   rX   rY   s   @rI   rÐ  rÐ  ‚  s¡   ø† ñ¨C°$©J÷ ð ò:<ò0;ò(ð Øð /3Ø&*ñ	:
à—l‘l TÑ)ð:
ð Ÿ™ tÑ+ð:
ð —‘˜tÑ#ð	:
ð
 Ð+Ñ,ð:
ð 
�Ñ	ô:
ó ó ö:
rQ   rÐ  z•
    Hubert Model with a sequence classification head on top (a linear layer over the pooled output) for tasks like
    SUPERB Keyword Spotting.
    c                   óÒ   ^ • \ rS rSrU 4S jrS rS r\\\	  SS\
R                  S-  S\
R                  S-  S\
R                  S-  S	\\   S
\\-  4
S jj5       5       5       rSrU =r$ )rd  i  c                 ó"  >• [         TU ]  U5        [        US5      (       a  UR                  (       a  [	        S5      e[        U5      U l        UR                  S-   nUR                  (       a2  [        R                  " [        R                  " U5      U-  5      U l        [        R                  " UR                  UR                   5      U l        [        R                  " UR                   UR$                  5      U l        U R)                  5         g )NrÓ  z]Sequence classification does not support the use of Hubert adapters (config.add_adapter=True)r   )r.   r/   r:   rÓ  r˜   rb  rT  r  Úuse_weighted_layer_sumr0   r·  rÉ   r£  r]  r´   r2   Úclassifier_proj_sizeÚ	projectorÚ
num_labelsÚ
classifierr¹  )rF   rG   Ú
num_layersrH   s      €rI   r/   Ú(HubertForSequenceClassification.__init__  sÃ   ø€ Ü‰Ñ˜Ô ä�6˜=×)Ñ)¨f×.@×.@ÜØoóð ô " &Ó)ˆŒØ×-Ñ-°Ñ1ˆ
Ø×(×(Ü!#§¢¬e¯jªj¸Ó.DÀzÑ.QÓ!RˆDÔÜŸš 6×#5Ñ#5°v×7RÑ7RÓSˆŒÜŸ)š) F×$?Ñ$?À×ARÑARÓSˆŒð 	�‰ÕrQ   c                 óL   • U R                   R                  R                  5         grâ  rã  rä  s    rI   rå  Ú6HubertForSequenceClassification.freeze_feature_encoder#  rç  rQ   c                 óT   • U R                   R                  5        H
  nSUl        M     gré  rê  r¢   s     rI   rë  Ú1HubertForSequenceClassification.freeze_base_model*  rí  rQ   Nr¨   rÁ   rî  rÃ   rà   c                 óÖ  • U R                   R                  (       a  SUS'   U R                  " U4SU0UD6nU R                   R                  (       al  UR                  n[        R
                  " USS9n[        R                  R                  U R                  SS9nXgR                  SSS5      -  R                  SS9nOUR                  nU R                  U5      nUc  UR                  SS9nO‚U R                  UR                   S   U5      n	U	R#                  S5      R%                  SSUR                   S   5      n
S	Xj) '   UR                  SS9U	R                  SS9R                  SS5      -  nU R'                  U5      nSnUbF  [)        5       nU" UR                  SU R                   R*                  5      UR                  S5      5      n[-        UUUR                  UR.                  S
9$ )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 [`HubertProcessor.__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).
TrÇ  rÁ   r   rÆ   r�   Nr"   râ   rô  )rG   r
  rT  rN   rÉ   Ústackr0   rË   rÌ   r]  rä   rv  r&  r  Úmeanr~  rã   r'  r(  r  r   r  r   rZ  )rF   r¨   rÁ   rî  rÃ   r  rN   Únorm_weightsÚpooled_outputÚpadding_maskÚexpand_padding_maskrö  rõ  Úloss_fcts                 rI   rO   Ú'HubertForSequenceClassification.forward2  sÛ  € ð, �;‰;×-×-Ø-1ˆFÐ)Ñ*à—+’+Øñ
à)ð
ð ñ
ˆð �;‰;×-×-Ø#×1Ñ1ˆMÜ!ŸKšK¨¸1Ñ=ˆMÜŸ=™=×0Ñ0°×1CÑ1CÈÐ0ÐLˆLØ*×->Ñ->¸rÀ1ÀaÓ-HÑH×MÑMÐRSÐMÐT‰Mà#×5Ñ5ˆMàŸ™ }Ó5ˆØÑ!Ø)×.Ñ.°1Ð.Ð5‰Mà×BÑBÀ=×CVÑCVÐWXÑCYÐ[iÓjˆLØ".×"8Ñ"8¸Ó"<×"CÑ"CÀAÀqÈ-×J]ÑJ]Ð^_ÑJ`Ó"aÐØ25ˆMÐ.Ñ/Ø)×-Ñ-°!Ð-Ð4°|×7GÑ7GÈAÐ7GÐ7N×7SÑ7SÐTVÐXYÓ7ZÑZˆMà—‘ Ó/ˆàˆØÑÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯K©K×,BÑ,BÓCÀVÇ[Á[ÐQSÃ_ÓUˆDä'ØØØ!×/Ñ/Ø×)Ñ)ñ	
ð 	
rQ   )r  rT  r]  r  rÍ  )rS   rT   rU   rV   r/   rå  rë  r   r   r   rÉ   rõ   r   r   rö   r   rO   rW   rX   rY   s   @rI   rd  rd    s•   ø† õò";ò(ð Ø Øð /3Ø&*ñ	9
à—l‘l TÑ)ð9
ð Ÿ™ tÑ+ð9
ð —‘˜tÑ#ð	9
ð
 Ð+Ñ,ð9
ð 
Ð)Ñ	)ô9
ó ó !ó ö9
rQ   rd  )rÐ  rd  rb  rS  r²  r`   )NÚcollections.abcr   Únumpyr›  rÉ   Útorch.nnr0   r   Ú r   r_  Úactivationsr   Úbackbone_utilsr   Úintegrations.deepspeedr	   Úintegrations.fsdpr
   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   r   Úprocessing_utilsr   r9   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   r   Úconfiguration_hubertr   Ú
get_loggerrS   rÜ  ÚModuler   rC   rd   rx   r…   r�   r­   rõ   ró   rÐ   rÒ   rø   r	  r  r7  rF  rM  rS  rö   rò   rŒ  Úndarrayr¯  rb  rÐ  rd  Ú__all__r€  rQ   rI   Ú<module>r3     s·  ðõ* %ã Û Ý Ý %å &Ý !Ý 9Ý @Ý 7Ý 6Ý BÝ 9ß YÑ Yß rÑ rÝ &ß @Ñ @ß Iß EÝ .ð 
×	Ò	˜HÓ	%€ô/ B§I¡Iô /ôd˜Ÿ™ô ôÐ!;ô ô*Ð9ô ô6Ð9ô ô0#˜2Ÿ9™9ô #ôL˜bŸi™iô ð0 !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(õ%ô8R)�b—i‘iô R)ôj˜Ÿ	™	ô ô0Ð3ô ôD+@�B—I‘Iô +@ô\˜RŸY™Yô ô2$Ð(Bô $ôN/@ 2§9¡9ô /@ðd ôB˜Oó Bó ðBðR /3ØñtØ��c�‰?ðtàðtð ðtð ×$Ñ$ tÑ+ð	tð
 ðtð ‡Z�Zõtðn ôI
Ð'ó I
ó ðI
ñX ðñô
A
Ð(ó A
óð
A
ñH ðñô]
Ð&;ó ]
óð]
ò@ f�rQ   