Ë
    ÜÓ^jm²  ã                   ó4  — d dl 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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% ddl&m'Z'  e#jP                  e)«      Z* G d„ de«      Z+ G d„ de«      Z, G d„ de«      Z- G d„ dej\                  «      Z/ G d„ dej\                  «      Z0 G d„ dej\                  «      Z1 G d„ d ej\                  «      Z2	 	 dDd!ej\                  d"ejf                  d#ejf                  d$ejf                  d%ejf                  dz  d&e4dz  d'e4d(ee!   fd)„Z5 G d*„ d+ej\                  «      Z6 G d,„ d-ej\                  «      Z7 G d.„ d/e«      Z8 G d0„ d1ej\                  «      Z9e" G d2„ d3e«      «       Z:	 	 dEd4e;e<e<f   d5e4d6e<d%ejz                  dz  d7e<d8ej|                  fd9„Z?e" G d:„ d;e:«      «       Z@dZA e"d<¬=«       G d>„ d?e:«      «       ZB e"d@¬=«       G dA„ dBe:«      «       ZCg dC¢ZDy)Fé    N)ÚCallable)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úis_deepspeed_zero3_enabled)Úis_fsdp_managed_module)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚCausalLMOutputÚSequenceClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModelÚ*get_torch_context_manager_or_global_device)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úis_flash_attention_requestedé   )Ú	SEWConfigc                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSEWNoLayerNormConvLayerc                 ód  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        |j                     | _        y )Nr   r   ©Úkernel_sizeÚstrideÚbias)ÚsuperÚ__init__Úconv_dimÚin_conv_dimÚout_conv_dimr   ÚConv1dÚconv_kernelÚconv_strideÚ	conv_biasÚconvr   Úfeat_extract_activationÚ
activation©ÚselfÚconfigÚlayer_idÚ	__class__s      €úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/sew/modeling_sew.pyr"   z SEWNoLayerNormConvLayer.__init__/   s—   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô ! ×!?Ñ!?Ñ@ˆ�ó    c                 óJ   — | j                  |«      }| j                  |«      }|S ©N)r*   r,   ©r.   Úhidden_statess     r2   ÚforwardzSEWNoLayerNormConvLayer.forward=   s$   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØÐr3   ©r   ©Ú__name__Ú
__module__Ú__qualname__r"   r8   Ú__classcell__©r1   s   @r2   r   r   .   s   ø„ õAör3   r   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSEWLayerNormConvLayerc                 ó°  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        j                  | j                  d¬«      | _        t        |j                     | _        y )Nr   r   r   T)Úelementwise_affine)r!   r"   r#   r$   r%   r   r&   r'   r(   r)   r*   Ú	LayerNormÚ
layer_normr   r+   r,   r-   s      €r2   r"   zSEWLayerNormConvLayer.__init__D   s¯   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô Ÿ,™, t×'8Ñ'8ÈTÔRˆŒÜ  ×!?Ñ!?Ñ@ˆ�r3   c                 ó´   — | j                  |«      }|j                  dd«      }| j                  |«      }|j                  dd«      }| j                  |«      }|S )Néþÿÿÿéÿÿÿÿ)r*   Ú	transposerE   r,   r6   s     r2   r8   zSEWLayerNormConvLayer.forwardS   sV   € ØŸ	™	 -Ó0ˆà%×/Ñ/°°BÓ7ˆØŸ™¨Ó6ˆØ%×/Ñ/°°BÓ7ˆàŸ™¨Ó6ˆØÐr3   r9   r:   r?   s   @r2   rA   rA   C   s   ø„ õAör3   rA   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSEWGroupNormConvLayerc                 óÆ  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        |j                     | _        t        j                  | j                  | j                  d¬«      | _        y )Nr   r   r   T)Ú
num_groupsÚnum_channelsÚaffine)r!   r"   r#   r$   r%   r   r&   r'   r(   r)   r*   r   r+   r,   Ú	GroupNormrE   r-   s      €r2   r"   zSEWGroupNormConvLayer.__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ˆ�r3   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r5   )r*   rE   r,   r6   s     r2   r8   zSEWGroupNormConvLayer.forwardo   s2   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØÐr3   r9   r:   r?   s   @r2   rK   rK   ^   s   ø„ õrö r3   rK   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSEWPositionalConvEmbeddingc                 ó¼  •— t         ‰| �  «        t        j                  |j                  |j                  |j
                  |j
                  dz  |j                  |j                  ¬«      | _        t        j                  j                  }t        t        j                  j                  d«      r$t        j                  j                  j                  }t        «       �r(dd l}|j                  j!                  | j                  j"                  d¬«      5   || j                  dd¬«      | _        d d d «       t        | j                  d«      rU| j                  j                  j"                  j$                  }| j                  j                  j"                  j&                  }n,| j                  j(                  }| j                  j*                  }|j                  j-                  | |«       |j                  j-                  | |«       n || j                  dd¬«      | _        t/        |j
                  «      | _        t2        |j4                     | _        y # 1 sw Y   �Œ'xY w)	Né   )r   ÚpaddingÚgroupsr   Úweight_normr   ©Úmodifier_rankÚweight)ÚnameÚdimÚparametrizations)r!   r"   r   r&   Úhidden_sizeÚnum_conv_pos_embeddingsÚnum_conv_pos_embedding_groupsÚsqueeze_factorr*   ÚutilsrX   Úhasattrr^   r	   Ú	deepspeedÚzeroÚGatheredParametersr[   Ú	original0Ú	original1Úweight_gÚweight_vÚregister_external_parameterÚSEWSamePadLayerrV   r   r+   r,   )r.   r/   rX   re   rj   rk   r1   s         €r2   r"   z#SEWPositionalConvEmbedding.__init__w   s®  ø€ Ü‰ÑÔÜ—I‘IØ×ÑØ×ÑØ×6Ñ6Ø×2Ñ2°aÑ7Ø×7Ñ7Ø×(Ñ(ô
ˆŒ	ô —h‘h×*Ñ*ˆÜ”2—8‘8×,Ñ,¨mÔ<ÜŸ(™(×3Ñ3×?Ñ?ˆKä%Õ'Ûà—‘×2Ñ2°4·9±9×3CÑ3CÐSTÐ2ÓUñ IÙ'¨¯	©	¸ÀaÔH�”	÷Iä�t—y‘yÐ"4Ô5ØŸ9™9×5Ñ5×<Ñ<×FÑF�ØŸ9™9×5Ñ5×<Ñ<×FÑF‘àŸ9™9×-Ñ-�ØŸ9™9×-Ñ-�Ø�N‰N×6Ñ6°t¸XÔFØ�N‰N×6Ñ6°t¸XÕFá# D§I¡I°HÀ!ÔDˆDŒIä& v×'EÑ'EÓFˆŒÜ  ×!?Ñ!?Ñ@ˆ�÷Iñ Iús   ÄIÉIc                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r5   )r*   rV   r,   r6   s     r2   r8   z"SEWPositionalConvEmbedding.forward™   s2   € ØŸ	™	 -Ó0ˆØŸ™ ]Ó3ˆØŸ™¨Ó6ˆàÐr3   r:   r?   s   @r2   rS   rS   v   s   ø„ ô AöDr3   rS   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rm   c                 óP   •— t         ‰| �  «        |dz  dk(  rd| _        y d| _        y )NrU   r   r   )r!   r"   Únum_pad_remove)r.   r`   r1   s     €r2   r"   zSEWSamePadLayer.__init__¢   s)   ø€ Ü‰ÑÔØ#:¸QÑ#>À!Ò#C˜aˆÕÈˆÕr3   c                 óV   — | j                   dkD  r|d d …d d …d | j                    …f   }|S ©Nr   )rq   r6   s     r2   r8   zSEWSamePadLayer.forward¦   s6   € Ø×Ñ Ò"Ø)ª!ªQÐ0F°4×3FÑ3FÐ2FÐ0FÐ*FÑGˆMØÐr3   r:   r?   s   @r2   rm   rm   ¡   s   ø„ ôKör3   rm   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSEWUpsamplingc                 óì   •— t         ‰| �  «        t        j                  |j                  |j                  |j
                  z  «      | _        t        |j                     | _	        |j
                  | _        y r5   )
r!   r"   r   ÚLinearr_   rb   Ú
projectionr   r+   r,   ©r.   r/   r1   s     €r2   r"   zSEWUpsampling.__init__­   sW   ø€ Ü‰ÑÔÜŸ)™) F×$6Ñ$6¸×8JÑ8JÈV×MbÑMbÑ8bÓcˆŒÜ  ×!?Ñ!?Ñ@ˆŒØ$×3Ñ3ˆÕr3   c                 ó.  — | j                  |«      }| j                  |«      }| j                  dkD  rc|j                  «       \  }}}|| j                  z  }|| j                  z  }|j	                  ||| j                  |«      }|j	                  |||«      }|S )Nr   )rx   r,   rb   ÚsizeÚreshape)r.   r7   ÚbszÚsrc_lenÚsrc_embed_dimÚtgt_lenÚtgt_embed_dims          r2   r8   zSEWUpsampling.forward³   s˜   € ØŸ™¨Ó6ˆØŸ™¨Ó6ˆà×Ñ Ò"à*7×*<Ñ*<Ó*>Ñ'ˆC�˜-Ø × 3Ñ 3Ñ3ˆGØ)¨T×-@Ñ-@Ñ@ˆMØ)×1Ñ1°#°wÀ×@SÑ@SÐUbÓcˆMØ)×1Ñ1°#°wÀÓNˆMàÐr3   r:   r?   s   @r2   ru   ru   ¬   s   ø„ ô4ör3   ru   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚSEWFeatureEncoderz.Construct the features from raw audio waveformc           	      óØ  •— t         ‰| �  «        |j                  dk(  rDt        |d¬«      gt	        |j
                  dz
  «      D �cg c]  }t        ||dz   ¬«      ‘Œ c}z   }nV|j                  dk(  r.t	        |j
                  «      D �cg c]  }t        ||¬«      ‘Œ }}nt        d|j                  › d�«      ‚t        j                  |«      | _        d| _        d	| _        y c c}w c c}w )
NÚgroupr   )r0   r   Úlayerz`config.feat_extract_norm` is z), but has to be one of ['group', 'layer']FT)r!   r"   Úfeat_extract_normrK   ÚrangeÚnum_feat_extract_layersr   rA   Ú
ValueErrorr   Ú
ModuleListÚconv_layersÚgradient_checkpointingÚ_requires_grad)r.   r/   ÚirŒ   r1   s       €r2   r"   zSEWFeatureEncoder.__init__Å   sé   ø€ Ü‰ÑÔà×#Ñ# wÒ.Ü0°À!ÔDÐEÜINÈv×OmÑOmÐpqÑOqÓIröIØDEÔ'¨¸¸Q¹Ö?òIñ ‰Kð ×%Ñ%¨Ò0ÜNSÐTZ×TrÑTrÓNsÖtÈÔ0°À!ÖDÐtˆKÑtäØ0°×1IÑ1IÐ0JÐJsÐtóð ô Ÿ=™=¨Ó5ˆÔØ&+ˆÔ#Ø"ˆÕùòIùò us   ÁC"Â	C'c                 óJ   — | j                  «       D ]	  }d|_        Œ d| _        y ©NF)Ú
parametersÚrequires_gradrŽ   ©r.   Úparams     r2   Ú_freeze_parametersz$SEWFeatureEncoder._freeze_parametersÖ   s(   € Ø—_‘_Ó&ò 	(ˆEØ"'ˆEÕð	(à#ˆÕr3   c                 óˆ   — |d d …d f   }| j                   r| j                  rd|_        | j                  D ]
  } ||«      }Œ |S )NT)rŽ   Útrainingr“   rŒ   )r.   Úinput_valuesr7   Ú
conv_layers       r2   r8   zSEWFeatureEncoder.forwardÛ   sP   € Ø$¢Q¨ WÑ-ˆð ×Ò 4§=¢=Ø*.ˆMÔ'à×*Ñ*ò 	6ˆJÙ& }Ó5‰Mð	6ð Ðr3   )r;   r<   r=   Ú__doc__r"   r–   r8   r>   r?   s   @r2   rƒ   rƒ   Â   s   ø„ Ù8ô#ò"$ö

r3   rƒ   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )NrH   ç      à¿rU   r   ©r]   )Úpr˜   r   )
r{   ÚtorchÚmatmulrI   r   Ú
functionalÚsoftmaxr¢   r˜   Ú
contiguous)
rœ   r�   rž   rŸ   r    r¡   r¢   r£   Úattn_weightsÚattn_outputs
             r2   Úeager_attention_forwardr¯   è   s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r3   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 )ÚSEWAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNÚ	embed_dimÚ	num_headsr¢   Ú
is_decoderr    Ú	is_causalr/   c                 ó
  •— t         ‰| �  «        || _        || _        || _        ||z  | _        || _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        || _	        || _
        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).r¥   )r    )r!   r"   r²   r³   r¢   Úhead_dimr/   rŠ   r¡   r´   rµ   r   rw   Úk_projÚv_projÚq_projÚout_proj)	r.   r²   r³   r¢   r´   r    rµ   r/   r1   s	           €r2   r"   zSEWAttention.__init__  sä   ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ˆŒØ"ˆŒä—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜŸ	™	 )¨Y¸TÔBˆ�r3   r7   Úkey_value_statesr    Úoutput_attentionsr£   Úreturnc                 óò  — |du}|j                   dd }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }	|r|n|}
g |
j                   dd ¢d‘| j                  ‘­}| j                  |
«      j                  |«      j	                  dd«      }| j                  |
«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      } || |	|||f| j                  sdn| j                  | j                  |dœ|¤Ž\  }} |j                  g |¢d‘­Ž j!                  «       }| j#                  |«      }||dfS )z#Input shape: Batch x Time x ChannelNrH   r   rU   ç        )r¢   r¡   r½   )Úshaper·   rº   ÚviewrI   r¸   r¹   r   Úget_interfacer/   Ú_attn_implementationr¯   r˜   r¢   r¡   r|   r¬   r»   )r.   r7   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                    r2   r8   zSEWAttention.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Ø/ñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆà˜L¨$Ð.Ð.r3   )rÀ   FTFN)NNF)r;   r<   r=   r›   ÚintÚfloatÚboolr   r"   r¨   ÚTensorr   r   Útupler8   r>   r?   s   @r2   r±   r±     sÿ   ø„ ÙGð Ø ØØØ#'ñCàðCð ðCð ð	Cð
 ðCð ðCð ðCð ˜DÑ õCðD 15Ø.2Ø).ñ0/à—|‘|ð0/ð  Ÿ,™,¨Ñ-ð0/ð Ÿ™ tÑ+ð	0/ð
   $™;ð0/ð Ð-Ñ.ð0/ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷0/r3   r±   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSEWFeedForwardc                 óö  •— t         ‰| �  «        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _	        t        |j                  t        «      rt        |j                     | _        n|j                  | _        t        j                  |j                  |j                  «      | _        t        j                  |j                   «      | _        y r5   )r!   r"   r   ÚDropoutÚactivation_dropoutÚintermediate_dropoutrw   r_   Úintermediate_sizeÚintermediate_denseÚ
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnÚoutput_denseÚhidden_dropoutÚoutput_dropoutry   s     €r2   r"   zSEWFeedForward.__init__Z  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¨×)>Ñ)>Ó?ˆÕr3   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S r5   )rÚ   rÞ   rØ   rß   rá   r6   s     r2   r8   zSEWFeedForward.forwardg  sX   € Ø×/Ñ/°Ó>ˆØ×0Ñ0°Ó?ˆØ×1Ñ1°-Ó@ˆà×)Ñ)¨-Ó8ˆØ×+Ñ+¨MÓ:ˆØÐr3   r:   r?   s   @r2   rÔ   rÔ   Y  s   ø„ ô@ör3   rÔ   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚSEWEncoderLayerc                 ó°  •— t         ‰| �  «        t        |j                  |j                  |j
                  d|¬«      | _        t        j                  |j                  «      | _
        t        j                  |j                  |j                  ¬«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        y )NF)r²   r³   r¢   r´   r/   ©Úeps)r!   r"   r±   r_   Únum_attention_headsÚattention_dropoutÚ	attentionr   rÖ   rà   r¢   rD   Úlayer_norm_epsrE   rÔ   Úfeed_forwardÚfinal_layer_normry   s     €r2   r"   zSEWEncoderLayer.__init__r  s�   ø€ Ü‰ÑÔÜ%Ø×(Ñ(Ø×0Ñ0Ø×,Ñ,ØØô
ˆŒô —z‘z &×"7Ñ"7Ó8ˆŒÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ*¨6Ó2ˆÔÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÕr3   c                 óè   — |}| j                  |||¬«      \  }}}| j                  |«      }||z   }| j                  |«      }|| j                  |«      z   }| j	                  |«      }|f}|r||fz  }|S )N©r    r½   )rê   r¢   rE   rì   rí   )r.   r7   r    r½   Úattn_residualr­   Ú_Úoutputss           r2   r8   zSEWEncoderLayer.forward�  s’   € Ø%ˆØ)-¯©Ø¨.ÐL]ð *8ó *
Ñ&ˆ�| Qð Ÿ™ ]Ó3ˆØ%¨Ñ5ˆàŸ™¨Ó6ˆØ%¨×(9Ñ(9¸-Ó(HÑHˆØ×-Ñ-¨mÓ<ˆà Ð"ˆáØ˜�Ñ&ˆGàˆr3   r‘   r:   r?   s   @r2   rä   rä   q  s   ø„ ô\÷r3   rä   c                   ó.   ‡ — e Zd Zˆ fd„Z	 	 	 	 dd„Zˆ xZS )Ú
SEWEncoderc                 ó  •— t         ‰| �  «        || _        t        |«      | _        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _        t        j                   t#        |j$                  «      D �cg c]  }t'        |«      ‘Œ c}«      | _        t+        |«      | _        d| _        y c c}w )Nræ   F)r!   r"   r/   rS   Úpos_conv_embedr   Ú	AvgPool1drb   ÚpoolrD   r_   rë   rE   rÖ   rà   r¢   r‹   rˆ   Únum_hidden_layersrä   Úlayersru   Úupsampler�   )r.   r/   rñ   r1   s      €r2   r"   zSEWEncoder.__init__–  s¹   ø€ Ü‰ÑÔØˆŒÜ8¸Ó@ˆÔÜ—L‘L ×!6Ñ!6¸×8MÑ8MÓNˆŒ	ÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ—z‘z &×"7Ñ"7Ó8ˆŒÜ—m‘mÄeÈF×LdÑLdÓFeÖ$fÀ¤_°VÕ%<Ò$fÓgˆŒÜ% fÓ-ˆŒØ&+ˆÕ#ùò %gs   ÃDc           	      ó  — |rdnd }|rdnd }|��5|j                  d«      j                  dd|j                  d   «      }t        | j                  «      rd|| <   |�d|v r|nd }nàd|| <   t
        j                  j                  |j                  «       j                  d«      | j                  j                  | j                  j                  ¬«      j                  d«      j                  «       }d|d d …d d d d …f   j                  |j                  ¬	«      z
  }|t        j                  |j                  «      j                   z  }|j                  d   }	|j#                  dd«      }| j%                  |«      }
| j'                  |«      }t!        |
j)                  d«      |j)                  d«      «      }|d
d |…f   |
d
d |…f   z   }|j#                  dd«      }| j+                  |«      }| j-                  |«      }t/        «       xs t1        | «      }| j2                  D ]j  }|r||fz   }t        j4                  g «      }| j6                  xr || j                  j8                  k  }|r|r ||||¬«      }|d   }|rd}|sŒb|d   fz   }Œl |r||fz   }| j;                  |«      }|j                  d   |	k  r4t
        j                  j=                  |ddd|	|j                  d   z
  f«      }|st?        d„ |||fD «       «      S tA        |||¬«      S )N© rH   r   rU   rÀ   r   )r   r   g      ð?©Údtype.rï   ©NNc              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr5   rý   )Ú.0Úvs     r2   ú	<genexpr>z%SEWEncoder.forward.<locals>.<genexpr>ó  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š©Úlast_hidden_stater7   Ú
attentions)!Ú	unsqueezeÚrepeatrÁ   r   r/   r   rª   Ú
max_pool1drÏ   rb   ÚsqueezeÚlongÚtorÿ   r¨   ÚfinfoÚminrI   rö   rø   r{   rE   r¢   r	   r
   rú   Úrandr˜   Ú	layerdroprû   ÚpadrÒ   r   )r.   r7   r    r½   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚall_self_attentionsÚexpand_attention_maskÚn_input_timestepsÚposition_embeddingsÚpooled_hidden_statesÚ
min_lengthÚsynced_gpusr†   Údropout_probabilityÚskip_the_layerÚlayer_outputss                     r2   r8   zSEWEncoder.forward¡  s<  € ñ #7™B¸DÐÙ$5™b¸4ÐàÑ%Ø$2×$<Ñ$<¸RÓ$@×$GÑ$GÈÈ1Èm×NaÑNaÐbcÑNdÓ$eÐ!Ü+¨D¯K©KÔ8à8;�Ð4Ð4Ñ5à4BÐ4NÐSTÐXfÑSf¡Ðmq‘ð 9<�Ð4Ð4Ñ5ô
 —M‘M×,Ñ,Ø&×,Ñ,Ó.×8Ñ8¸Ó;Ø$(§K¡K×$>Ñ$>Ø#Ÿ{™{×9Ñ9ð -ó ÷
 ‘W˜Q“Zß‘T“Vð ð "% ~²a¸¸tÂQÐ6FÑ'G×'JÑ'JÐQ^×QdÑQdÐ'JÓ'eÑ!e�Ø!/´%·+±+¸m×>QÑ>QÓ2R×2VÑ2VÑ!V�à)×/Ñ/°Ñ2Ðà%×/Ñ/°°1Ó5ˆØ"×1Ñ1°-Ó@ÐØ#Ÿy™y¨Ó7ÐÜÐ,×1Ñ1°"Ó5Ð7K×7PÑ7PÐQSÓ7TÓUˆ
Ø,¨S°+°:°+Ð-=Ñ>ÐATÐUXÐZeÐ[eÐZeÐUeÑAfÑfˆØ%×/Ñ/°°1Ó5ˆàŸ™¨Ó6ˆØŸ™ ]Ó3ˆä0Ó2ÒRÔ6LÈTÓ6Rˆà—[‘[ò 	PˆEÙ#Ø$5¸Ð8HÑ$HÐ!ô #(§*¡*¨R£.Ðà!Ÿ]™]ÒZÐ/BÀTÇ[Á[×EZÑEZÑ/ZˆNÙ!¡[á %Ø!°.ÐTeô!�ð !.¨aÑ 0�áØ ,�â Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð'	Pñ*  Ø 1°]Ð4DÑ DÐàŸ™ mÓ4ˆØ×Ñ˜qÑ!Ð$5Ò5ÜŸM™M×-Ñ-¨m¸aÀÀAÐGXÐ[h×[nÑ[nÐopÑ[qÑGqÐ=rÓsˆMáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ø+Ø*ô
ð 	
r3   )NFFTr:   r?   s   @r2   rô   rô   •  s   ø„ ô	,ð ØØ"Ø÷W
r3   rô   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 )ÚSEWPreTrainedModelr/   Úsewr™   ÚaudioTFc           
      óÈ  •— t         ‰| �  |«       t        |t        «      ržt	        j
                  |j                  j                  ddt        j                  d|j                  j                  d   |j                  j                  z  z  «      z  ¬«       t	        j                  |j                  j                  d«       yt        |t        j                  «      ròt!        «       rÈddl}t%        |d«      rht%        |d«      r\|j&                  j)                  |j*                  |j,                  gd¬«      5  t	        j.                  |j                  «       ddd«       y|j&                  j)                  |j                  d¬«      5  t	        j.                  |j                  «       ddd«       yt	        j.                  |j                  «       yy# 1 sw Y   yxY w# 1 sw Y   yxY w)	zInitialize the weightsr   rU   r   )ÚmeanÚstdNrk   rj   rY   )r!   Ú_init_weightsrÛ   rS   ÚinitÚnormal_r*   r[   ÚmathÚsqrtr   Úin_channelsÚ	constant_r    r   r&   r	   re   rd   rf   rg   rk   rj   Úkaiming_normal_)r.   rœ   re   r1   s      €r2   r'  z SEWPreTrainedModel._init_weights  se  ø€ ô 	‰Ñ˜fÔ%Ü�fÔ8Ô9Ü�L‰LØ—‘×"Ñ"ØØœŸ	™	 ! v§{¡{×'>Ñ'>¸qÑ'AÀFÇKÁK×D[ÑD[Ñ'[Ñ"\Ó]Ñ]õô
 �N‰N˜6Ÿ;™;×+Ñ+¨QÕ/Ü˜¤§	¡	Ô*Ü)Ô+Û ä˜6 :Ô.´7¸6À:Ô3NØ"Ÿ™×:Ñ:¸F¿O¹OÈVÏ_É_Ð;]ÐmnÐ:Óoñ <Ü×,Ñ,¨V¯]©]Ô;÷<ð <ð #Ÿ™×:Ñ:¸6¿=¹=ÐXYÐ:ÓZñ <Ü×,Ñ,¨V¯]©]Ô;÷<ð <ô ×$Ñ$ V§]¡]Õ3ð +÷
<ð <ú÷<ð <ús   Ä2 GÆ GÇGÇG!Úinput_lengthsc                 ó˜   — 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_lengthr   r   s      r2   Ú_conv_out_lengthzMSEWPreTrainedModel._get_feat_extract_output_lengths.<locals>._conv_out_length#  s"   € ô —9‘9˜\¨KÑ7¸ÈwÔWÐZ[Ñ[Ð[r3   )Úzipr/   r'   r(   )r.   r/  r6  r   r   s        r2   Ú _get_feat_extract_output_lengthsz3SEWPreTrainedModel._get_feat_extract_output_lengths  sQ   € ò
	\ô
 $' t§{¡{×'>Ñ'>ÀÇÁ×@WÑ@WÓ#Xò 	QÑˆK˜Ù,¨]¸KÈÓP‰Mð	Qð Ðr3   Úfeature_vector_lengthr    c                 ó  — | j                  |j                  d«      «      j                  t        j                  «      }t        j
                  ||j                  ¬«      }|j                  d«      |j                  d«      k  S )NrH   )Údevicer   r   )r8  Úsumr  r¨   r  Úaranger;  r  )r.   r9  r    Úoutput_lengthsÚattention_idss        r2   Ú"_get_feature_vector_attention_maskz5SEWPreTrainedModel._get_feature_vector_attention_mask-  sj   € Ø×>Ñ>¸~×?QÑ?QÐRTÓ?UÓV×YÑYÔZ_×ZdÑZdÓeˆô Ÿ™Ð%:À>×CXÑCXÔYˆØ×&Ñ& qÓ)¨N×,DÑ,DÀQÓ,GÑGÐGr3   )r;   r<   r=   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnr¨   Úno_gradr'  Ú
LongTensorrÎ   r8  r@  r>   r?   s   @r2   r!  r!  û  s€   ø… àÓØÐØ$€OØÐØ&*Ð#ØÐØ€NØÐà€U‡]�]ƒ_ó4ó ð4ð.¸e×>NÑ>NÐQTÑ>Tó ðHÈð HÐ]b×]mÑ]m÷ Hr3   r!  rÁ   Ú	mask_probÚmask_lengthÚ	min_masksr¾   c                 óà  ‡‡‡‡‡— | \  }Š‰dk  rt        d«      ‚‰‰kD  rt        d‰› d‰› d�«      ‚t        j                  j                  d«      j	                  «       Šˆˆˆˆˆfd„}|�-|j                  «       j                  d«      j                  «       nt        |«      D �cg c]  }‰‘Œ c}}t        j                  |‰ft        ¬	«      }	g }
 |‰«      }|d
k(  r|	S |D ]¯  } ||«      }t        j                  j                  t        j                  |‰dz
  z
  «      |d¬«      }t        |«      d
k(  r‰dz
  }n|d
   }t        j                  |t        j                  ||z
  t        j                   ¬	«      |z  g«      }|
j#                  |«       Œ± t        j$                  |
«      }
t        j&                  |
dd…dd…df   ||‰f«      }
|
j)                  ||‰z  «      }
t        j                  ‰«      dddd…f   }t        j&                  |||‰f«      j)                  ||‰z  «      }|
|z   }
|
j+                  «       ‰dz
  kD  r‰dz
  |
|
‰dz
  kD  <   t        j,                  |	|
dd«       |	S c c}w )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  ‰kD  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)r5  Únum_masked_spanÚepsilonrL  rK  rM  Úsequence_lengths     €€€€€r2   Úcompute_num_masked_spanz6_compute_mask_indices.<locals>.compute_num_masked_span\  so   ø€ ä˜i¨,Ñ6¸ÑDÀwÑNÓOˆÜ˜o¨yÓ9ˆð ˜[Ñ(¨?Ò:Ø-°Ñ<ˆOð ˜;¨™?Ñ+¨oÒ=Ü! ,°+À±/Ñ"BÀAÓFˆOàÐr3   NrH   rþ   r   F)Úreplace)rŠ   ÚnpÚrandomr  ÚitemÚdetachr<  Útolistrˆ   ÚzerosrÐ   Úchoicer=  ÚlenÚconcatenateÚonesÚint32ÚappendÚarrayÚbroadcast_tor|   rQ  Úput_along_axis)rÁ   rK  rL  r    rM  Ú
batch_sizerU  rñ   r/  Úspec_aug_maskÚspec_aug_mask_idxsÚmax_num_masked_spanr5  rR  Úspec_aug_mask_idxÚdummy_mask_idxÚoffsetsrS  rT  s    `` `            @@r2   Ú_compute_mask_indicesrm  6  s­  ü€ ð0 #(Ñ€J�à�Q‚ÜÐAÓBÐBà�_Ò$ÜØ]Ð^iÐ]jØ& Ð&7°qð:ó
ð 	
ô �i‰i�n‰n˜QÓ×$Ñ$Ó&€G÷ð ð$ Ð%ð 	×ÑÓ×#Ñ# BÓ'×.Ñ.Ô0ä',¨ZÓ'8Ö9 !ŠoÒ9ð ô —H‘H˜j¨/Ð:Ä$ÔG€MØÐá1°/ÓBÐà˜aÒØÐà%ò 5ˆá1°,Ó?ˆô ŸI™I×,Ñ,Ü�I‰I�l k°A¡oÑ6Ó7¸ÐRWð -ó 
Ðô Ð Ó! QÒ&ð -¨qÑ0‰Nà.¨qÑ1ˆNäŸN™NØ¤§¡Ð(;¸oÑ(MÔUW×U]ÑU]Ô ^ÐaoÑ oÐpó
Ðð 	×!Ñ!Ð"3Õ4ð/5ô2 Ÿ™Ð"4Ó5Ðô Ÿ™Øš1ša ˜:Ñ&¨Ð5HÈ+Ð(VóÐð ,×3Ñ3°JÐ@SÐVaÑ@aÓbÐô �i‰i˜Ó$ T¨4² ]Ñ3€GÜ�o‰o˜g¨
Ð4GÈÐ'UÓV×^Ñ^ØÐ'¨+Ñ5ó€Gð ,¨gÑ5Ðð ×ÑÓ /°AÑ"5Ò5ØGVÐYZÑGZÐÐ-°À!Ñ0CÑCÑDô ×Ñ�mÐ%7¸¸BÔ?àÐùòw :s   Â$	I+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 )ÚSEWModelr/   c                 óÄ  •— t         ‰| �  |«       || _        t        |«      | _        t        j                  |j                  d   |j                  ¬«      | _	        |j                  d   |j                  k7  | _        | j                  r2t        j                  |j                  d   |j                  «      | _        t        j                  |j                  «      | _        |j"                  dkD  s|j$                  dkD  rEt        j&                  t)        j*                  |j                  «      j-                  «       «      | _        t1        |«      | _        | j5                  «        y )NrH   ræ   rÀ   )r!   r"   r/   rƒ   Úfeature_extractorr   rD   r#   rë   rE   r_   Úproject_featuresrw   Úfeature_projectionrÖ   Úfeat_proj_dropoutÚfeature_dropoutÚmask_time_probÚmask_feature_probÚ	Parameterr¨   rÑ   Úuniform_Úmasked_spec_embedrô   ÚencoderÚ	post_initry   s     €r2   r"   zSEWModel.__init__¯  sÿ   ø€ Ü‰Ñ˜Ô ØˆŒÜ!2°6Ó!:ˆÔÜŸ,™, v§¡°rÑ':À×@UÑ@UÔVˆŒà &§¡°Ñ 3°v×7IÑ7IÑ IˆÔØ× Ò Ü&(§i¡i°·±ÀÑ0CÀV×EWÑEWÓ&XˆDÔ#Ü!Ÿz™z¨&×*BÑ*BÓCˆÔà× Ñ  3Ò&¨&×*BÑ*BÀSÒ*HÜ%'§\¡\´%·,±,¸v×?QÑ?QÓ2R×2[Ñ2[Ó2]Ó%^ˆDÔ"ä! &Ó)ˆŒð 	�‰Õr3   Nr7   Úmask_time_indicesr    c                 óÎ  — t        | j                  dd«      s|S |j                  «       \  }}}|�)| j                  j	                  |j
                  «      ||<   nË| j                  j                  dkD  r²| j                  r¦t        ||f| j                  j                  | j                  j                  || j                  j                  ¬«      }t        j                  ||j                  t        j                  ¬«      }| j                  j	                  |j
                  «      ||<   | j                  j                  dkD  r¨| j                  rœt        ||f| j                  j                  | j                  j                   | j                  j"                  ¬«      }t        j                  ||j                  t        j                  ¬«      }|dd…df   j%                  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   )rK  rL  r    rM  )r;  rÿ   )rK  rL  rM  rH   )Úgetattrr/   r{   rz  r  rÿ   rv  r˜   rm  Úmask_time_lengthÚmask_time_min_masksr¨   Útensorr;  rÐ   rw  Úmask_feature_lengthÚmask_feature_min_masksÚexpand)r.   r7   r}  r    rf  rT  r_   Úmask_feature_indicess           r2   Ú_mask_hidden_stateszSEWModel._mask_hidden_statesÃ  sš  € ô �t—{‘{Ð$8¸$Ô?Ø Ð ð 4A×3EÑ3EÓ3GÑ0ˆ
�O [àÐ(à/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Ð.Ñ/àÐr3   r™   r½   r  r  r¾   c                 óZ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |«      }|j                  dd«      }| j                  |«      }| j                  r| j                  |«      }| j                  |«      }	|�| j                  |	j                  d   |«      }| j                  |	|¬«      }	| j                  |	||||¬«      }
|
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   rU   )r}  ©r    r½   r  r  r   r  )r/   r½   r  r  rq  rI   rE   rr  rs  ru  r@  rÁ   rˆ  r{  r   r7   r  )r.   r™   r    r}  r½   r  r  r£   Úextract_featuresr7   Úencoder_outputss              r2   r8   zSEWModel.forwardñ  sU  € ð  2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà×1Ñ1°,Ó?ÐØ+×5Ñ5°a¸Ó;ÐØŸ?™?Ð+;Ó<Ðà× Ò Ø#×6Ñ6Ð7GÓHÐØ×,Ñ,Ð-=Ó>ˆàÐ%à!×DÑDÀ]×EXÑEXÐYZÑE[Ð]kÓlˆNà×0Ñ0°ÐRcÐ0ÓdˆàŸ,™,ØØ)Ø/Ø!5Ø#ð 'ó 
ˆð (¨Ñ*ˆáØ!Ð# o°a°bÐ&9Ñ9Ð9äØ+Ø)×7Ñ7Ø&×1Ñ1ô
ð 	
r3   r   ©NNNNN)r;   r<   r=   r   r"   r¨   ÚFloatTensorrJ  rˆ  r   rÑ   rÐ   rÒ   r   r8   r>   r?   s   @r2   ro  ro  ­  sì   ø„ ð˜yõ ð. 7;Ø26ñ	,à×(Ñ(ð,ð !×,Ñ,¨tÑ3ð,ð ×(Ñ(¨4Ñ/ó	,ð\ ð /3Ø6:Ø)-Ø,0Ø#'ñ4
à—l‘l TÑ)ð4
ð Ÿ™ tÑ+ð4
ð !×,Ñ,¨tÑ3ð	4
ð
   $™;ð4
ð # T™kð4
ð ˜D‘[ð4
ð 
�Ñ	 ò4
ó ô4
r3   ro  zk
    SEW Model with a `language modeling` head on top for Connectionist Temporal Classification (CTC).
    )Úcustom_introc                   óÞ   ‡ — 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 )Ú	SEWForCTCNÚtarget_langc                 ó®  •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  «      | _        || _        |j                  €t        d| j                  › d�«      ‚t        |d«      r|j                  r|j                  n|j                  }t	        j                   ||j                  «      | _        | j%                  «        y)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 [`SEWForCTC`] 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: `SEWForCTC.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.Úadd_adapter)r!   r"   ro  r"  r   rÖ   Úfinal_dropoutr¢   r’  Ú
vocab_sizerŠ   r1   rd   r”  Úoutput_hidden_sizer_   rw   Úlm_headr|  )r.   r/   r’  r—  r1   s       €r2   r"   zSEWForCTC.__init__2  s¿   ø€ ô 	‰Ñ˜Ô ä˜FÓ#ˆŒÜ—z‘z &×"6Ñ"6Ó7ˆŒà&ˆÔà×ÑÐ$ÜØ0°·±Ð0@ð AHð Hóð ô *1°¸Ô)GÈF×L^ÒL^ˆF×%Ò%Ðdj×dvÑdvð 	ô —y‘yÐ!3°V×5FÑ5FÓGˆŒð 	�‰Õr3   c                 ó8  — t        «       t        j                  d«      k(  ry| j                  }|�&t	        | j
                  dd«      €t        d|› d�«      ‚|€-t	        | j
                  dd«      �t        j                  d«       y|�| j                  |d¬«       yy)	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.
        ÚmetaNÚadapter_attn_dimz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)r.   r£   r’  s      r2   Útie_weightszSEWForCTC.tie_weightsO  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ÐÕ;ð %r3   c                 óL   — | j                   j                  j                  «        y©z¨
        Calling this function will disable the gradient computation for the feature encoder so that its parameter will
        not be updated during training.
        N©r"  rq  r–   ©r.   s    r2   Úfreeze_feature_encoderz SEWForCTC.freeze_feature_encoderg  ó   € ð
 	�‰×"Ñ"×5Ñ5Õ7r3   c                 óP   — | j                   j                  «       D ]	  }d|_        Œ y©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©r"  r’   r“   r”   s     r2   Úfreeze_base_modelzSEWForCTC.freeze_base_modeln  ó(   € ð
 —X‘X×(Ñ(Ó*ò 	(ˆEØ"'ˆEÕñ	(r3   r™   r    r½   r  r  Úlabelsr¾   c           
      ó¤  — |�|n| j                   j                  }|�I|j                  «       | j                   j                  k\  r"t	        d| j                   j                  › �«      ‚| j                  |||||¬«      }|d   }	| j                  |	«      }	| j                  |	«      }
d}|��b|�|n$t        j                  |t        j                  ¬«      }| j                  |j                  d«      «      j                  t        j                  «      }|dk\  }|j                  d«      }|j                  |«      }t        j                   j#                  |
dt        j$                  ¬«      j'                  dd«      }t        j(                  j*                  j-                  d	¬
«      5  t        j                   j/                  ||||| j                   j0                  | j                   j2                  | j                   j4                  ¬«      }ddd«       |s|
f|t6        d z   }|�|f|z   S |S t9        ||
|j:                  |j<                  ¬«      S # 1 sw Y   ŒExY w)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þ   rH   )r]   rÿ   r   F)Úenabled)ÚblankÚ	reductionÚzero_infinity©ÚlossÚlogitsr7   r  )r/   r  rQ  r–  rŠ   r"  r¢   r˜  r¨   Ú	ones_liker  r8  r<  r  Úmasked_selectr   rª   Úlog_softmaxÚfloat32rI   ÚbackendsÚcudnnÚflagsÚctc_lossÚpad_token_idÚctc_loss_reductionÚctc_zero_infinityÚ_HIDDEN_STATES_START_POSITIONr   r7   r  )r.   r™   r    r½   r  r  r¬  r£   rò   r7   r´  r³  r/  Úlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probsÚoutputs                     r2   r8   zSEWForCTC.forwardv  s'  € ð$ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ &§*¡*£,°$·+±+×2HÑ2HÒ"HÜÐCÀDÇKÁK×DZÑDZÐC[Ð\Ó]Ð]à—(‘(ØØ)Ø/Ø!5Ø#ð ó 
ˆð   ™
ˆØŸ™ ]Ó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×<Ñ<Ø"&§+¡+×"?Ñ"?ð .ó �÷	ñ Ø�Y Ô)FÐ)GÐ!HÑHˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØ˜f°G×4IÑ4IÐV]×VhÑVhô
ð 	
÷	ð 	ús   ÆA#IÉIr5   r�  )r;   r<   r=   rÝ   r"   r   r¥  rª  r   r¨   rÑ   rÐ   rÒ   r   r8   r>   r?   s   @r2   r‘  r‘  ,  sÀ   ø„ ñ¨C°$©Jõ ò:<ò08ò(ð ð /3Ø)-Ø,0Ø#'Ø&*ñE
à—l‘l TÑ)ðE
ð Ÿ™ tÑ+ðE
ð   $™;ð	E
ð
 # T™kðE
ð ˜D‘[ðE
ð —‘˜tÑ#ðE
ð 
�Ñ	òE
ó ôE
r3   r‘  z’
    SEW 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 )ÚSEWForSequenceClassificationc                 óü  •— t         ‰| �  |«       t        |d«      r|j                  rt	        d«      ‚t        |«      | _        |j                  dz   }|j                  r0t        j                  t        j                  |«      |z  «      | _        t        j                  |j                  |j                   «      | _        t        j                  |j                   |j$                  «      | _        | j)                  «        y )Nr”  zZSequence classification does not support the use of SEW adapters (config.add_adapter=True)r   )r!   r"   rd   r”  rŠ   ro  r"  rù   Úuse_weighted_layer_sumr   rx  r¨   r`  Úlayer_weightsrw   r_   Úclassifier_proj_sizeÚ	projectorÚ
num_labelsÚ
classifierr|  )r.   r/   Ú
num_layersr1   s      €r2   r"   z%SEWForSequenceClassification.__init__Æ  sÀ   ø€ Ü‰Ñ˜Ô ä�6˜=Ô)¨f×.@Ò.@ÜØlóð ô ˜FÓ#ˆŒØ×-Ñ-°Ñ1ˆ
Ø×(Ò(Ü!#§¡¬e¯j©j¸Ó.DÀzÑ.QÓ!RˆDÔÜŸ™ 6×#5Ñ#5°v×7RÑ7RÓSˆŒÜŸ)™) F×$?Ñ$?À×ARÑARÓSˆŒð 	�‰Õr3   c                 óL   — | j                   j                  j                  «        yr¢  r£  r¤  s    r2   r¥  z3SEWForSequenceClassification.freeze_feature_encoder×  r¦  r3   c                 óP   — | j                   j                  «       D ]	  }d|_        Œ yr¨  r©  r”   s     r2   rª  z.SEWForSequenceClassification.freeze_base_modelÞ  r«  r3   Nr™   r    r½   r  r  r¬  r¾   c                 ó<  — |�|n| j                   j                  }| j                   j                  rdn|}| j                  |||||¬«      }| j                   j                  rr|t           }	t        j                  |	d¬«      }	t        j                  j                  | j                  d¬«      }
|	|
j                  ddd«      z  j                  d¬«      }	n|d   }	| j                  |	«      }	|€|	j                  d¬«      }n‰| j                  |	j                   d   |«      }|j#                  d«      j%                  dd|	j                   d   «      }d	|	| <   |	j                  d¬«      |j                  d¬«      j                  dd«      z  }| j'                  |«      }d}|�Ft)        «       } ||j                  d| j                   j*                  «      |j                  d«      «      }|s|f|t        d z   }|�|f|z   S |S t-        |||j.                  |j0                  ¬
«      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 [`SEWProcessor.__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¦   rH   r   rU   rÀ   r²  )r/   r  rÉ  r"  rÀ  r¨   Ústackr   rª   r«   rÊ  rÂ   r<  rÌ  r%  r@  rÁ   r  r	  rÎ  r   rÍ  r   r7   r  )r.   r™   r    r½   r  r  r¬  r£   rò   r7   Únorm_weightsÚpooled_outputÚpadding_maskÚexpand_padding_maskr´  r³  Úloss_fctrÅ  s                     r2   r8   z$SEWForSequenceClassification.forwardæ  s  € ð0 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØ'+§{¡{×'IÒ'I™tÐOcÐà—(‘(ØØ)Ø/Ø!5Ø#ð ó 
ˆð �;‰;×-Ò-Ø#Ô$AÑBˆMÜ!ŸK™K¨¸1Ô=ˆMÜŸ=™=×0Ñ0°×1CÑ1CÈÐ0ÓLˆLØ*¨\×->Ñ->¸rÀ1ÀaÓ-HÑH×MÑMÐRSÐMÓT‰Mà# A™Jˆ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áØ�Y Ô)FÐ)GÐ!HÑHˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   r�  )r;   r<   r=   r"   r¥  rª  r   r¨   rÑ   rÐ   rÒ   r   r8   r>   r?   s   @r2   rÇ  rÇ  ¿  s±   ø„ ôò"8ò(ð ð /3Ø)-Ø,0Ø#'Ø&*ñC
à—l‘l TÑ)ðC
ð Ÿ™ tÑ+ðC
ð   $™;ð	C
ð
 # T™kðC
ð ˜D‘[ðC
ð —‘˜tÑ#ðC
ð 
Ð)Ñ	)òC
ó ôC
r3   rÇ  )r‘  rÇ  ro  r!  )NrÀ   rs   )Er*  Úcollections.abcr   ÚnumpyrW  r¨   r   Útorch.nnr   Ú r   r(  Úactivationsr   Úintegrations.deepspeedr	   Úintegrations.fsdpr
   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   r   Úprocessing_utilsr   rc   r   r   r   Úutils.genericr   Úconfiguration_sewr   Ú
get_loggerr;   r�  r   rA   rK   ÚModulerS   rm   ru   rƒ   rÑ   rÏ   r¯   r±   rÔ   rä   rô   r!  rÒ   rÎ   rJ  Úndarrayrm  ro  rÀ  r‘  rÇ  Ú__all__rý   r3   r2   ú<module>rë     sŠ  ðó* Ý $ã Û Ý Ý %å &Ý !Ý @Ý 7Ý BÝ 9ß YÑ Yß rÑ rÝ &ß @Ñ @Ý 9Ý (ð 
ˆ×	Ñ	˜HÓ	%€ôÐ8ô ô*Ð6ô ô6Ð6ô ô0( §¡ô (ôV�b—i‘iô ô�B—I‘Iô ô,#˜Ÿ	™	ô #ðX !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô8R/�2—9‘9ô R/ôj�R—Y‘Yô ô0!Ð0ô !ôHc
�—‘ô c
ðL ô7H˜ó 7Hó ð7Hð| /3ØñtØ��c�‰?ðtàðtð ðtð ×$Ñ$ tÑ+ð	tð
 ðtð ‡Z�Zótðn ôx
Ð!ó x
ó ðx
ðv !"Ð ñ ðôô
K
Ð"ó K
óð
K
ñ\ ðôôe
Ð#5ó e
óðe
òP Z�r3   