Ë
    T^(h|+ ã                   ó�  — d dl Z d dlZd dlmZmZmZ d dlZd dlZd dl	m
Z
 d dlm
c mZ d dl	mZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZm Z m!Z!m"Z"m#Z# ddl$m%Z%  e#jL                  e'«      Z(dZ)dZ* G d„ de
jV                  «      Z, G d„ de
jV                  «      Z- G d„ de
jV                  «      Z. G d„ de
jV                  «      Z/ G d„ de
jV                  «      Z0 G d„ de
jV                  «      Z1 G d„ de
jV                  «      Z2 G d„ de
jV                  «      Z3 G d„ d e
jV                  «      Z4 G d!„ d"e
jV                  «      Z5 G d#„ d$e«      Z6 G d%„ d&e
jV                  «      Z7 G d'„ d(e
jV                  «      Z8 G d)„ d*e
jV                  «      Z9 G d+„ d,e
jV                  «      Z: G d-„ d.e
jV                  «      Z; G d/„ d0e
jV                  «      Z<	 	 dUd1ee=e=f   d2e>d3e=d4eej~                     d5e=d6ej€                  fd7„ZAg d8¢ZBd9ZCd:ZDeZE e d;eC«       G d<„ d=e6«      «       ZFd>ZGd?ZHd@ZI e dAeC«       G dB„ dCe6«      «       ZJ e dDeC«       G dE„ dFe6«      «       ZKdGZLd d gZM e dHeC«       G dI„ dJe6«      «       ZN G dK„ dLe
jV                  «      ZO G dM„ dNe
jV                  «      ZPdOZQdPZR e dQeC«       G dR„ dSe6«      «       ZSg dT¢ZTy)Vé    N)ÚOptionalÚTupleÚUnion)ÚCrossEntropyLossé   )ÚACT2FN)Úis_deepspeed_zero3_enabled)Úis_fsdp_managed_module)ÚBaseModelOutputÚCausalLMOutputÚSequenceClassifierOutputÚTokenClassifierOutputÚWav2Vec2BaseModelOutputÚXVectorOutput)ÚPreTrainedModel)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚis_peft_availableÚloggingé   )ÚWavLMConfigz1patrickvonplaten/wavlm-libri-clean-100h-base-plusr   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMSamePadLayerc                 óP   •— t         ‰| �  «        |dz  dk(  rd| _        y d| _        y ©Né   r   r   )ÚsuperÚ__init__Únum_pad_remove)ÚselfÚnum_conv_pos_embeddingsÚ	__class__s     €úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/wavlm/modeling_wavlm.pyr   zWavLMSamePadLayer.__init__/   s)   ø€ Ü‰ÑÔØ#:¸QÑ#>À!Ò#C˜aˆÕÈˆÕó    c                 óV   — | j                   dkD  r|d d …d d …d | j                    …f   }|S ©Nr   )r    ©r!   Úhidden_statess     r$   ÚforwardzWavLMSamePadLayer.forward3   s6   € Ø×Ñ Ò"Ø)ª!ªQÐ0F°4×3FÑ3FÐ2FÐ0FÐ*FÑGˆMØÐr%   ©Ú__name__Ú
__module__Ú__qualname__r   r*   Ú__classcell__©r#   s   @r$   r   r   .   s   ø„ ôKör%   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMPositionalConvEmbeddingc                 ó¦  •— t         ‰| �  «        t        j                  |j                  |j                  |j
                  |j
                  dz  |j                  ¬«      | _        t        j                  j                  }t        t        j                  j                  d«      r$t        j                  j                  j                  }t        «       �r(dd l}|j                  j                  | j                  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
                  «      | _        t0        |j2                     | _        y # 1 sw Y   �Œ'xY w)	Nr   )Úkernel_sizeÚpaddingÚgroupsÚweight_normr   )Úmodifier_rankÚweight)ÚnameÚdimÚparametrizations)r   r   ÚnnÚConv1dÚhidden_sizer"   Únum_conv_pos_embedding_groupsÚconvÚutilsr7   Úhasattrr<   r	   Ú	deepspeedÚzeroÚGatheredParametersr9   Ú	original0Ú	original1Úweight_gÚweight_vÚregister_external_parameterr   r5   r   Úfeat_extract_activationÚ
activation)r!   Úconfigr7   rD   rI   rJ   r#   s         €r$   r   z%WavLMPositionalConvEmbedding.__init__:   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ä(¨×)GÑ)GÓHˆŒÜ  ×!?Ñ!?Ñ@ˆ�÷Iñ Iús   ÄIÉIc                 ó´   — |j                  dd«      }| j                  |«      }| j                  |«      }| j                  |«      }|j                  dd«      }|S ©Nr   r   )Ú	transposerA   r5   rM   r(   s     r$   r*   z$WavLMPositionalConvEmbedding.forward[   sV   € Ø%×/Ñ/°°1Ó5ˆàŸ	™	 -Ó0ˆØŸ™ ]Ó3ˆØŸ™¨Ó6ˆà%×/Ñ/°°1Ó5ˆØÐr%   r+   r0   s   @r$   r2   r2   9   s   ø„ ôAöBr%   r2   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMFeatureProjectionc                 ó4  •— t         ‰| �  «        t        j                  |j                  d   |j
                  ¬«      | _        t        j                  |j                  d   |j                  «      | _	        t        j                  |j                  «      | _        y )Néÿÿÿÿ©Úeps)r   r   r=   Ú	LayerNormÚconv_dimÚlayer_norm_epsÚ
layer_normÚLinearr?   Ú
projectionÚDropoutÚfeat_proj_dropoutÚdropout©r!   rN   r#   s     €r$   r   zWavLMFeatureProjection.__init__g   sf   ø€ Ü‰ÑÔÜŸ,™, v§¡°rÑ':À×@UÑ@UÔVˆŒÜŸ)™) F§O¡O°BÑ$7¸×9KÑ9KÓLˆŒÜ—z‘z &×":Ñ":Ó;ˆ�r%   c                 óp   — | j                  |«      }| j                  |«      }| j                  |«      }||fS ©N)r[   r]   r`   )r!   r)   Únorm_hidden_statess      r$   r*   zWavLMFeatureProjection.forwardm   s:   € à!Ÿ_™_¨]Ó;ÐØŸ™Ð(:Ó;ˆØŸ™ ]Ó3ˆØÐ0Ð0Ð0r%   r+   r0   s   @r$   rS   rS   f   s   ø„ ô<ö1r%   rS   c                   ó  ‡ — e Zd ZdZ	 	 	 	 ddedededededefˆ fd„Z	 	 	 	 dd	ej                  d
e
ej                     de
ej                     dedeej                  e
ej                     e
eej                        f   f
d„Zd	ej                  d
eej                  ej                   f   dej                  dedej                  ej                  ff
d„Zdededej                  fd„Zdej                  dej                  fd„Zˆ xZS )ÚWavLMAttentionz=Multi-headed attention from 'Attention Is All You Need' paperÚ	embed_dimÚ	num_headsr`   Únum_bucketsÚmax_distanceÚhas_relative_position_biasc                 ó  •— t         ‰| �  «        || _        || _        || _        ||z  | _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        t        j                  ||«      | _
        t        j                  ||«      | _        t        j                  ||«      | _        t        j                  ||«      | _        || _        || _        t        j                   t#        j$                  d| j                  dd«      «      | _        t        j                  | j
                  d«      | _        |r0t        j*                  | j                  | j                  «      | _        y y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿r   é   )r   r   rg   rh   r`   Úhead_dimÚ
ValueErrorÚscalingr=   r\   Úk_projÚv_projÚq_projÚout_projri   rj   Ú	ParameterÚtorchÚonesÚgru_rel_pos_constÚgru_rel_pos_linearÚ	EmbeddingÚrel_attn_embed)r!   rg   rh   r`   ri   rj   rk   r#   s          €r$   r   zWavLMAttention.__init__x   s7  ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒä—i‘i 	¨9Ó5ˆŒÜ—i‘i 	¨9Ó5ˆŒÜ—i‘i 	¨9Ó5ˆŒÜŸ	™	 )¨YÓ7ˆŒà&ˆÔØ(ˆÔä!#§¡¬e¯j©j¸¸D¿N¹NÈAÈqÓ.QÓ!RˆÔÜ"$§)¡)¨D¯M©M¸1Ó"=ˆÔá%Ü"$§,¡,¨t×/?Ñ/?ÀÇÁÓ"PˆDÕð &r%   r)   Úattention_maskÚposition_biasÚoutput_attentionsÚreturnc                 ó   — |j                  «       \  }}}|€S| j                  ||«      }|j                  d«      j                  |ddd«      j	                  || j
                  z  ||«      }|j	                  |j                  dd | j
                  dfz   «      }	|	j                  dddd«      }	| j                  |	«      }
|
j	                  |	j                  dd dz   «      j                  d«      }
t        j                  |
«      j                  dd¬«      \  }}||| j                  z  d	z
  z  d
z   }|j	                  || j
                  z  dd«      |z  }|j	                  d||f«      }| j                  ||||«      \  }}|||fS )z'Attention layer with relative attentionNr   r   rU   r   r   )r   é   ©r;   ç      ð?g       @)ÚsizeÚcompute_biasÚ	unsqueezeÚrepeatÚviewrh   ÚshapeÚpermutery   Úsumrv   ÚsigmoidÚchunkrx   Útorch_multi_head_self_attention)r!   r)   r|   r}   r~   ÚindexÚbszÚtgt_lenÚ_Úgated_hidden_statesÚrelative_position_projÚgate_aÚgate_bÚgate_outputÚgated_position_biasÚattn_outputÚattn_weightss                    r$   r*   zWavLMAttention.forwardœ   s­  € ð (×,Ñ,Ó.‰ˆˆW�að Ð Ø ×-Ñ-¨g°wÓ?ˆMà×'Ñ'¨Ó*×1Ñ1°#°q¸!¸QÓ?×DÑDÀSÈ4Ï>É>ÑEYÐ[bÐdkÓlð ð ,×0Ñ0°×1DÑ1DÀSÀbÐ1IÈTÏ^É^Ð]_ÐL`Ñ1`ÓaÐØ1×9Ñ9¸!¸QÀÀ1ÓEÐð "&×!8Ñ!8Ð9LÓ!MÐØ!7×!<Ñ!<Ð=P×=VÑ=VÐWZÐXZÐ=[Ð^dÑ=dÓ!e×!iÑ!iÐjlÓ!mÐô Ÿ™Ð'=Ó>×DÑDÀQÈBÐDÓO‰ˆ�Ø ¨×)?Ñ)?Ñ ?À#Ñ EÑFÈÑLˆð *×.Ñ.¨s°T·^±^Ñ/CÀRÈÓKÈmÑ[ÐØ1×6Ñ6¸¸GÀWÐ7MÓNÐà$(×$HÑ$HØ˜>Ð+>Ð@Qó%
Ñ!ˆ�\ð ˜L¨-Ð7Ð7r%   r˜   c                 óX  — |j                  dd«      x}x}}|�|j                  d«      nd}dx}	}
d}t        j                  |||| j                  | j
                  t        j                  dg«      t        j                  | j                  j                  | j                  j                  | j                  j                  f«      |	|
|| j                  | j                  j                  | j                  j                  | j                   |||d| j                  j                  | j                  j                  | j                  j                  ¬«      \  }}|j                  dd«      }|�C|dd…df   j#                  |j$                  dd | j
                  fz   |j$                  dd z   «      }||fS )zCsimple wrapper around torch's multi_head_attention_forward functionr   r   NFT)Úuse_separate_proj_weightÚq_proj_weightÚk_proj_weightÚv_proj_weight)rQ   ÚneÚFÚmulti_head_attention_forwardrg   rh   rv   ÚemptyÚcatrs   Úbiasrq   rr   r`   rt   r9   ÚtrainingÚbroadcast_tor‰   )r!   r)   r|   r˜   r~   ÚqueryÚkeyÚvalueÚkey_padding_maskÚbias_kÚbias_vÚadd_zero_attnr™   rš   s                 r$   rŽ   z.WavLMAttention.torch_multi_head_self_attentionÅ   s�  € ð ,×5Ñ5°a¸Ó;Ð;ˆÐ;��eØ3AÐ3M˜>×,Ñ,¨QÔ/ÐSWÐð Ðˆ�Øˆô %&×$BÑ$BØØØØ�N‰NØ�N‰NÜ�K‰K˜˜ÓÜ�I‰I�t—{‘{×'Ñ'¨¯©×)9Ñ)9¸4¿;¹;×;KÑ;KÐLÓMØØØØ�L‰LØ�M‰M× Ñ Ø�M‰M×ÑØ�M‰MØØØØ%)ØŸ+™+×,Ñ,ØŸ+™+×,Ñ,ØŸ+™+×,Ñ,ô+%
Ñ!ˆ�\ð2 "×+Ñ+¨A¨qÓ1ˆàÐ#ð (ª¨4¨Ñ0×=Ñ=Ø×"Ñ" 2 AÐ&¨$¯.©.Ð):Ñ:¸\×=OÑ=OÐPQÐPRÐ=SÑSóˆLð ˜LÐ(Ð(r%   Úquery_lengthÚ
key_lengthc                 óˆ  — t        j                  |t         j                  ¬«      d d …d f   }t        j                  |t         j                  ¬«      d d d …f   }||z
  }| j                  |«      }|j	                  | j
                  j                  j                  «      }| j                  |«      }|j                  g d¢«      }|S )N©Údtype)r   r   r   )	rv   ÚarangeÚlongÚ_relative_positions_bucketÚtor{   r9   ÚdevicerŠ   )r!   r¯   r°   Úcontext_positionÚmemory_positionÚrelative_positionÚrelative_position_bucketÚvaluess           r$   r…   zWavLMAttention.compute_biasü   s¢   € Ü Ÿ<™<¨¼E¿J¹JÔGÊÈ4ÈÑPÐÜŸ,™, z¼¿¹ÔDÀTÊ1ÀWÑMˆØ+Ð.>Ñ>ÐØ#'×#BÑ#BÐCTÓ#UÐ Ø#;×#>Ñ#>¸t×?RÑ?R×?YÑ?Y×?`Ñ?`Ó#aÐ Ø×$Ñ$Ð%=Ó>ˆØ—‘¢	Ó*ˆØˆr%   Úrelative_positionsc                 ó$  — | j                   dz  }|dkD  j                  t        j                  «      |z  }t        j                  |«      }|dz  }||k  }t        j
                  |j                  «       |z  «      }|t        j
                  | j                  |z  «      z  }|||z
  z  }||z   j                  t        j                  «      }t        j                  |t        j                  ||dz
  «      «      }|t        j                  |||«      z  }|S r   )ri   r·   rv   rµ   ÚabsÚlogÚfloatÚmathrj   ÚminÚ	full_likeÚwhere)r!   r¾   ri   Úrelative_bucketsÚ	max_exactÚis_smallÚrelative_positions_if_largeÚrelative_position_if_larges           r$   r¶   z)WavLMAttention._relative_positions_bucket  s  € Ø×&Ñ&¨!Ñ+ˆà.°Ñ2×6Ñ6´u·z±zÓBÀ[ÑPÐÜ"ŸY™YÐ'9Ó:Ðà 1Ñ$ˆ	Ø%¨	Ñ1ˆä&+§i¡iÐ0B×0HÑ0HÓ0JÈYÑ0VÓ&WÐ#Ø&AÄDÇHÁHÈT×M^ÑM^ÐajÑMjÓDkÑ&kÐ#Ø&AÀ[ÐS\ÑE\Ñ&]Ð#Ø&/Ð2MÑ&M×%QÑ%QÔRW×R\ÑR\Ó%]Ð"Ü%*§Y¡YØ&¬¯©Ð8RÐT_ÐbcÑTcÓ(dó&
Ð"ð 	œEŸK™K¨Ð2DÐF`ÓaÑaÐØÐr%   )ç        i@  i   T©NNFr   )r,   r-   r.   Ú__doc__ÚintrÂ   Úboolr   rv   ÚTensorr   r   r*   ÚFloatTensorr   Ú
LongTensorÚ
BoolTensorrŽ   r…   r¶   r/   r0   s   @r$   rf   rf   u   s…  ø„ ÙGð ØØØ+/ñ"Qàð"Qð ð"Qð ð	"Qð
 ð"Qð ð"Qð %)õ"QðN 26Ø04Ø"'Øñ'8à—|‘|ð'8ð ! §¡Ñ.ð'8ð   §¡Ñ-ð	'8ð
  ð'8ð 
ˆu�|‰|˜X e§l¡lÑ3°X¸eÀEÇLÁLÑ>QÑ5RÐRÑ	Só'8ðR5)à×(Ñ(ð5)ð ˜e×.Ñ.°×0@Ñ0@Ð@ÑAð5)ð #×.Ñ.ð	5)ð
  ð5)ð ×
Ñ
˜U×.Ñ.Ð	/ó5)ðn¨ð ¸#ð À%×BSÑBSó ð ¸U×=NÑ=Nð  ÐSX×SdÑSd÷  r%   rf   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMFeedForwardc                 óö  •— t         ‰| �  «        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _	        t        |j                  t        «      rt        |j                     | _        n|j                  | _        t        j                  |j                  |j                  «      | _        t        j                  |j                   «      | _        y rc   )r   r   r=   r^   Úactivation_dropoutÚintermediate_dropoutr\   r?   Úintermediate_sizeÚintermediate_denseÚ
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnÚoutput_denseÚhidden_dropoutÚoutput_dropoutra   s     €r$   r   zWavLMFeedForward.__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¨×)>Ñ)>Ó?ˆÕr%   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S rc   )rÛ   rß   rÙ   rà   râ   r(   s     r$   r*   zWavLMFeedForward.forward)  sX   € Ø×/Ñ/°Ó>ˆØ×0Ñ0°Ó?ˆØ×1Ñ1°-Ó@ˆà×)Ñ)¨-Ó8ˆØ×+Ñ+¨MÓ:ˆØÐr%   r+   r0   s   @r$   rÖ   rÖ     s   ø„ ô@ör%   rÖ   c                   ó2   ‡ — e Zd Zddedefˆ fd„Zdd„Zˆ xZS )ÚWavLMEncoderLayerrN   rk   c                 óÚ  •— t         ‰| �  «        t        |j                  |j                  |j
                  |j                  |j                  |¬«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t!        |«      | _        t        j                  |j                  |j                  ¬«      | _        y ©N)rg   rh   r`   ri   rj   rk   rV   ©r   r   rf   r?   Únum_attention_headsÚattention_dropoutri   Úmax_bucket_distanceÚ	attentionr=   r^   rá   r`   rX   rZ   r[   rÖ   Úfeed_forwardÚfinal_layer_norm©r!   rN   rk   r#   s      €r$   r   zWavLMEncoderLayer.__init__4  ó¬   ø€ Ü‰ÑÔÜ'Ø×(Ñ(Ø×0Ñ0Ø×,Ñ,Ø×*Ñ*Ø×3Ñ3Ø'Aô
ˆŒô —z‘z &×"7Ñ"7Ó8ˆŒÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ,¨VÓ4ˆÔÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÕr%   c                 óî   — |}| j                  |||||¬«      \  }}}| j                  |«      }||z   }| j                  |«      }|| j                  |«      z   }| j	                  |«      }||f}|r||fz  }|S )N©r|   r}   r~   r�   )rì   r`   r[   rí   rî   )	r!   r)   r|   r}   r~   r�   Úattn_residualrš   Úoutputss	            r$   r*   zWavLMEncoderLayer.forwardC  sœ   € Ø%ˆØ59·^±^ØØ)Ø'Ø/Øð 6Dó 6
Ñ2ˆ�| ]ð Ÿ™ ]Ó3ˆØ%¨Ñ5ˆàŸ™¨Ó6ˆà%¨×(9Ñ(9¸-Ó(HÑHˆØ×-Ñ-¨mÓ<ˆà  -Ð0ˆáØ˜�Ñ&ˆGàˆr%   ©TrÍ   ©r,   r-   r.   r   rÐ   r   r*   r/   r0   s   @r$   rå   rå   3  s   ø„ ñ\˜{ð \Èõ \÷r%   rå   c                   ó2   ‡ — e Zd Zddedefˆ fd„Zdd„Zˆ xZS )Ú WavLMEncoderLayerStableLayerNormrN   rk   c                 óÚ  •— t         ‰| �  «        t        |j                  |j                  |j
                  |j                  |j                  |¬«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t!        |«      | _        t        j                  |j                  |j                  ¬«      | _        y rç   rè   rï   s      €r$   r   z)WavLMEncoderLayerStableLayerNorm.__init__]  rð   r%   c                 óè   — |}| j                  |«      }| j                  ||||¬«      \  }}}| j                  |«      }||z   }|| j                  | j	                  |«      «      z   }||f}|r||fz  }|S )N)r|   r}   r~   )r[   rì   r`   rí   rî   )r!   r)   r|   r}   r~   ró   rš   rô   s           r$   r*   z(WavLMEncoderLayerStableLayerNorm.forwardl  s•   € Ø%ˆØŸ™¨Ó6ˆØ59·^±^ØØ)Ø'Ø/ð	 6Dó 6
Ñ2ˆ�| ]ð Ÿ™ ]Ó3ˆØ%¨Ñ5ˆØ%¨×(9Ñ(9¸$×:OÑ:OÐP]Ó:^Ó(_Ñ_ˆà  -Ð0ˆáØ˜�Ñ&ˆGàˆr%   rõ   )NNFrö   r0   s   @r$   rø   rø   \  s   ø„ ñ\˜{ð \Èõ \÷r%   rø   c                   ó.   ‡ — e Zd Zˆ fd„Z	 	 	 	 dd„Zˆ xZS )ÚWavLMEncoderc           
      ó¢  •— t         ‰| �  «        || _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _	        t        j                  |j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t!        ||dk(  ¬«      ‘Œ c}«      | _        d| _        y c c}w ©NrV   r   )rk   F)r   r   rN   r2   Úpos_conv_embedr=   rX   r?   rZ   r[   r^   rá   r`   Ú
ModuleListÚrangeÚnum_hidden_layersrå   ÚlayersÚgradient_checkpointing©r!   rN   Úir#   s      €r$   r   zWavLMEncoder.__init__‚  s�   ø€ Ü‰ÑÔØˆŒÜ:¸6ÓBˆÔÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ—z‘z &×"7Ñ"7Ó8ˆŒÜ—m‘mÜUZÐ[a×[sÑ[sÓUtÖuÐPQÔ˜vÀ1ÈÁ6ÖKÒuó
ˆŒð ',ˆÕ#ùò vó   Â!Cc                 ó  — |rdnd }|rdnd }|�5|j                  d«      j                  dd|j                  d   «      }d|| <   | j                  |«      }	||	z   }| j	                  |«      }| j                  |«      }t        «       xs t        | «      }
d }t        | j                  «      D ]±  \  }}|r||fz   }t        j                  g «      }| j                  xr  |dkD  xr || j                  j                  k  }|r|
rM| j                  r,| j                  r | j!                  |j"                  ||||«      }n ||||||¬«      }|d d \  }}|rd}|sŒ©|d   fz   }Œ³ |r||fz   }|st%        d„ |||fD «       «      S t'        |||¬	«      S )
N© rU   r   r   r   rò   ©NNNc              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrc   r	  ©Ú.0Úvs     r$   ú	<genexpr>z'WavLMEncoder.forward.<locals>.<genexpr>Ì  ó   è ø€ Òm˜qÐ_`Ñ_lœÑmùó   ‚Š©Úlast_hidden_stater)   Ú
attentions)r†   r‡   r‰   rÿ   r[   r`   r	   r
   Ú	enumerater  rv   Úrandr¦   rN   Ú	layerdropr  Ú_gradient_checkpointing_funcÚ__call__Útupler   ©r!   r)   r|   r~   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚall_self_attentionsÚexpand_attention_maskÚposition_embeddingsÚsynced_gpusr}   r  ÚlayerÚdropout_probabilityÚskip_the_layerÚlayer_outputss                    r$   r*   zWavLMEncoder.forward�  sÜ  € ñ #7™B¸DÐÙ$5™b¸4ÐàÐ%à$2×$<Ñ$<¸RÓ$@×$GÑ$GÈÈ1Èm×NaÑNaÐbcÑNdÓ$eÐ!Ø45ˆMÐ0Ð0Ñ1à"×1Ñ1°-Ó@ÐØ%Ð(;Ñ;ˆØŸ™¨Ó6ˆØŸ™ ]Ó3ˆä0Ó2ÒRÔ6LÈTÓ6RˆØˆä! $§+¡+Ó.ò !	P‰HˆAˆuÙ#Ø$5¸Ð8HÑ$HÐ!ô #(§*¡*¨R£.Ðà!Ÿ]™]Òf¨q°1©uÒfÐ:MÐPT×P[ÑP[×PeÑPeÑ:eˆNÙ!¡[à×.Ò.°4·=²=Ø$(×$EÑ$EØŸ™Ø%Ø&Ø%Ø)ó%‘Mñ %*Ø%Ø'5Ø&3Ø*;Øô%�Mð 0=¸R¸aÐ/@Ñ,�˜}áØ 2�â Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ðC!	PñF  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ø+Ø*ô
ð 	
r%   ©NFFTr+   r0   s   @r$   rü   rü   �  s   ø„ ô	,ð ØØ"Ø÷D
r%   rü   c                   ó.   ‡ — e Zd Zˆ fd„Z	 	 	 	 dd„Zˆ xZS )ÚWavLMEncoderStableLayerNormc           
      ó¢  •— t         ‰| �  «        || _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _	        t        j                  |j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t!        ||dk(  ¬«      ‘Œ c}«      | _        d| _        y c c}w rþ   )r   r   rN   r2   rÿ   r=   rX   r?   rZ   r[   r^   rá   r`   r   r  r  rø   r  r  r  s      €r$   r   z$WavLMEncoderStableLayerNorm.__init__Õ  s¦   ø€ Ü‰ÑÔØˆŒÜ:¸6ÓBˆÔÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ—z‘z &×"7Ñ"7Ó8ˆŒÜ—m‘mô ˜v×7Ñ7Ó8öàô 1°ÐUVÐZ[ÑU[Ö]òó
ˆŒð ',ˆÕ#ùòr  c                 ó  — |rdnd }|rdnd }|�5|j                  d«      j                  dd|j                  d   «      }d|| <   | j                  |«      }	||	z   }| j	                  |«      }t        «       xs t        | «      }
d }t        | j                  «      D ]°  \  }}|r||fz   }t        j                  g «      }| j                  xr  |dkD  xr || j                  j                  k  }|r|
rL| j                  r,| j                  r | j                  |j                   ||||«      }n |||||¬«      }|d d \  }}|rd}|sŒ¨|d   fz   }Œ² | j#                  |«      }|r||fz   }|st%        d„ |||fD «       «      S t'        |||¬	«      S )
Nr	  rU   r   r   r   )r|   r~   r}   r
  c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrc   r	  r  s     r$   r  z6WavLMEncoderStableLayerNorm.forward.<locals>.<genexpr>"  r  r  r  )r†   r‡   r‰   rÿ   r`   r	   r
   r  r  rv   r  r¦   rN   r  r  r  r  r[   r  r   r  s                    r$   r*   z#WavLMEncoderStableLayerNorm.forwardã  sÛ  € ñ #7™B¸DÐÙ$5™b¸4ÐàÐ%à$2×$<Ñ$<¸RÓ$@×$GÑ$GÈÈ1Èm×NaÑNaÐbcÑNdÓ$eÐ!Ø45ˆMÐ0Ð0Ñ1à"×1Ñ1°-Ó@ÐØ%Ð(;Ñ;ˆØŸ™ ]Ó3ˆä0Ó2ÒRÔ6LÈTÓ6RˆØˆä! $§+¡+Ó.ò  	P‰HˆAˆuÙ#Ø$5¸Ð8HÑ$HÐ!ô #(§*¡*¨R£.Ðà!Ÿ]™]Òf¨q°1©uÒfÐ:MÐPT×P[ÑP[×PeÑPeÑ:eˆNÙ!¡[ð ×.Ò.°4·=²=Ø$(×$EÑ$EØŸ™Ø%Ø&Ø%Ø)ó%‘Mñ %*Ø%Ø'5Ø*;Ø&3ô	%�Mð 0=¸R¸aÐ/@Ñ,�˜}áØ 2�â Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ðA 	PðD Ÿ™¨Ó6ˆáØ 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ð;LÐYlô
ð 	
r%   r'  r+   r0   s   @r$   r)  r)  Ô  s   ø„ ô,ð" ØØ"Ø÷B
r%   r)  c                   ó8   ‡ — e Zd ZdZˆ fd„Zed„ «       Zd„ Zˆ xZS )ÚWavLMGumbelVectorQuantizerz¬
    Vector quantization using gumbel softmax. See [CATEGORICAL REPARAMETERIZATION WITH
    GUMBEL-SOFTMAX](https://arxiv.org/pdf/1611.01144.pdf) for more information.
    c                 ó0  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | j                  z  dk7  r&t        d|j                  › d| j                  › d�«      ‚t        j                  t        j                  d| j                  | j
                  z  |j                  | j                  z  «      «      | _        t        j                  |j                  d   | j                  | j
                  z  «      | _        d| _        y )Nr   z`config.codevector_dim z5 must be divisible by `config.num_codevector_groups` z for concatenation.r   rU   r   )r   r   Únum_codevector_groupsÚ
num_groupsÚnum_codevectors_per_groupÚnum_varsÚcodevector_dimro   r=   ru   rv   rÒ   Úcodevectorsr\   rY   Úweight_projÚtemperaturera   s     €r$   r   z#WavLMGumbelVectorQuantizer.__init__.  sî   ø€ Ü‰ÑÔØ ×6Ñ6ˆŒØ×8Ñ8ˆŒà× Ñ  4§?¡?Ñ2°aÒ7ÜØ)¨&×*?Ñ*?Ð)@ð A6Ø6:·o±oÐ5Fð G%ð%óð ô Ÿ<™<Ü×Ñ˜a §¡°4·=±=Ñ!@À&×BWÑBWÐ[_×[jÑ[jÑBjÓkó
ˆÔô Ÿ9™9 V§_¡_°RÑ%8¸$¿/¹/ÈDÏMÉMÑ:YÓZˆÔð ˆÕr%   c           	      óÎ   — | j                  d¬«      }t        j                  t        j                  |t        j                  |dz   «      z  d¬«       «      j                  «       }|S )Nr   r‚   gH¯¼šò×z>rU   )Úmeanrv   Úexpr‹   rÁ   )ÚprobsÚmarginal_probsÚ
perplexitys      r$   Ú_compute_perplexityz.WavLMGumbelVectorQuantizer._compute_perplexityC  sR   € àŸ™¨˜Ó*ˆÜ—Y‘Y¤§	¡	¨.¼5¿9¹9À^ÐVZÑEZÓ;[Ñ*[ÐacÔ dÐdÓe×iÑiÓkˆ
ØÐr%   c                 óâ  — |j                   \  }}}| j                  |«      }|j                  ||z  | j                  z  d«      }| j                  r t
        j                  j                  |j                  «       | j                  d¬«      }|j                  |«      }t        j                  |j                  ||z  | j                  d«      j                  «       d¬«      }| j                  |«      }n}|j                  d¬«      } |j                  |j                   Ž j!                  d|j                  dd«      d«      }|j                  ||z  | j                  d«      }| j                  |«      }|j                  ||z  d«      }|j#                  d«      | j$                  z  }	|	j                  ||z  | j                  | j&                  d«      }
|
j)                  d«      j                  ||d«      }
|
|fS )NrU   T)ÚtauÚhardr‚   r   rƒ   éþÿÿÿ)r‰   r6  rˆ   r1  r¦   r=   Ú
functionalÚgumbel_softmaxrÂ   r7  Útype_asrv   Úsoftmaxr>  ÚargmaxÚ	new_zerosÚscatter_r†   r5  r3  r‹   )r!   r)   Ú
batch_sizeÚsequence_lengthr?   Úcodevector_probsÚcodevector_soft_distr=  Úcodevector_idxÚcodevectors_per_groupr5  s              r$   r*   z"WavLMGumbelVectorQuantizer.forwardI  sÝ  € Ø3@×3FÑ3FÑ0ˆ
�O [ð ×(Ñ(¨Ó7ˆØ%×*Ñ*¨:¸Ñ+GÈ$Ï/É/Ñ+YÐ[]Ó^ˆà�=Š=ä!Ÿ}™}×;Ñ;¸M×<OÑ<OÓ<QÐW[×WgÑWgÐnrÐ;ÓsÐØ/×7Ñ7¸ÓFÐô $)§=¡=Ø×"Ñ" :°Ñ#?ÀÇÁÐRTÓU×[Ñ[Ó]Ðceô$Ð ð ×1Ñ1Ð2FÓG‰Jð +×1Ñ1°bÐ1Ó9ˆNØ6˜}×6Ñ6¸×8KÑ8KÐL×UÑUØ�N×'Ñ'¨¨AÓ.°ó Ðð  0×4Ñ4°ZÀ/Ñ5QÐSW×SbÑSbÐdfÓgÐà×1Ñ1Ð2BÓCˆJà+×0Ñ0°¸oÑ1MÈrÓRÐà 0× :Ñ :¸2Ó >À×AQÑAQÑ QÐØ+×0Ñ0°¸oÑ1MÈtÏÉÐ`d×`mÑ`mÐoqÓrˆØ!—o‘o bÓ)×.Ñ.¨z¸?ÈBÓOˆà˜JÐ&Ð&r%   )	r,   r-   r.   rÎ   r   Ústaticmethodr>  r*   r/   r0   s   @r$   r.  r.  (  s&   ø„ ñô
ð* ñó ðö
"'r%   r.  c                   óŽ   — e Zd ZdZeZdZdZdZdZ	dZ
d„ Z	 ddeej                  ef   d	ee   fd
„Z	 ddedej                  fd„Zy)ÚWavLMPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚwavlmÚinput_valuesTFc           
      óz  — t        |t        «      r‰|j                  j                  j                  j                  dd¬«       |j                  j                  j                  j                  «        t        j                  j                  |j                  «       yt        |t        «      r²t        j                  j                  |j                  j                  ddt        j                  d|j                  j                   d   |j                  j"                  z  z  «      z  ¬«       t        j                  j%                  |j                  j                  d«       yt        |t&        «      r›t        j                  d|j(                  j*                  z  «      }t        j                  j                  |j(                  j                  | |¬«       t        j                  j                  |j(                  j                  | |¬«       yt        |t        j,                  «      rm|j                  j                  j                  d| j.                  j0                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j2                  t        j4                  f«      rJ|j                  j                  j                  «        |j                  j                  j7                  d«       yt        |t        j8                  «      r t        j                  j;                  |j                  «       |j                  �jt        j                  |j<                  |j"                  |j                   d   z  z  «      }t        j                  j                  |j                  | |¬«       yyy)	zInitialize the weightsrÌ   r   )r9  Ústdr   r   )ÚaÚbNrƒ   )rÜ   r.  r6  r9   ÚdataÚnormal_r¥   Úzero_r=   ÚinitÚuniform_r5  r2   rA   rÃ   Úsqrtr4   Úin_channelsÚ	constant_rS   r]   Úin_featuresr\   rN   Úinitializer_rangerX   Ú	GroupNormÚfill_r>   Úkaiming_normal_r6   )r!   ÚmoduleÚks      r$   Ú_init_weightsz"WavLMPreTrainedModel._init_weights{  sŠ  € ô �fÔ8Ô9Ø×Ñ×%Ñ%×*Ñ*×2Ñ2¸ÀÐ2ÔCØ×Ñ×#Ñ#×(Ñ(×.Ñ.Ô0Ü�G‰G×Ñ˜V×/Ñ/Õ0Ü˜Ô <Ô=Ü�G‰G�O‰OØ—‘×"Ñ"ØØœŸ	™	 ! v§{¡{×'>Ñ'>¸qÑ'AÀFÇKÁK×D[ÑD[Ñ'[Ñ"\Ó]Ñ]ð ô ô
 �G‰G×Ñ˜fŸk™k×.Ñ.°Õ2Ü˜Ô 6Ô7Ü—	‘	˜!˜f×/Ñ/×;Ñ;Ñ;Ó<ˆAÜ�G‰G×Ñ˜V×.Ñ.×5Ñ5¸!¸¸qÐÔAÜ�G‰G×Ñ˜V×.Ñ.×3Ñ3¸°r¸QÐÕ?Ü˜¤§	¡	Ô*Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSà�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡¬r¯|©|Ð <Ô=Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤§	¡	Ô*Ü�G‰G×#Ñ# F§M¡MÔ2à�{‰{Ð&Ü—I‘I˜fŸm™m¨v×/AÑ/AÀF×DVÑDVÐWXÑDYÑ/YÑZÓ[�Ü—‘× Ñ  §¡°°°aÐ Õ8ð 'ð +r%   NÚinput_lengthsÚadd_adapterc                 óT  — |€| j                   j                  n|}d„ }t        | j                   j                  | j                   j                  «      D ]  \  }} ||||«      }Œ |rBt        | j                   j                  «      D ]   } ||d| j                   j                  «      }Œ" |S )zH
        Computes the output length of the convolutional layers
        c                 ó>   — t        j                  | |z
  |d¬«      dz   S )NÚfloor)Úrounding_moder   )rv   Údiv©Úinput_lengthr4   Ústrides      r$   Ú_conv_out_lengthzOWavLMPreTrainedModel._get_feat_extract_output_lengths.<locals>._conv_out_length¥  s"   € ô —9‘9˜\¨KÑ7¸ÈwÔWÐZ[Ñ[Ð[r%   r   )rN   rj  ÚzipÚconv_kernelÚconv_strider  Únum_adapter_layersÚadapter_stride)r!   ri  rj  rs  r4   rr  r’   s          r$   Ú _get_feat_extract_output_lengthsz5WavLMPreTrainedModel._get_feat_extract_output_lengthsœ  s¦   € ð 2=Ð1D�d—k‘k×-Ò-È+ˆò	\ô
 $' t§{¡{×'>Ñ'>ÀÇÁ×@WÑ@WÓ#Xò 	QÑˆK˜Ù,¨]¸KÈÓP‰Mð	Qñ Ü˜4Ÿ;™;×9Ñ9Ó:ò _�Ù 0°ÀÀ4Ç;Á;×C]ÑC]Ó ^‘ð_ð Ðr%   Úfeature_vector_lengthr|   c                 ó   — |j                  d¬«      d d …df   }| j                  ||¬«      }|j                  t        j                  «      }|j
                  d   }t        j                  ||f|j                  |j                  ¬«      }d|t        j                  |j
                  d   |j                  ¬«      |dz
  f<   |j                  dg«      j                  d«      j                  dg«      j                  «       }|S )NrU   r‚   ©rj  r   )r³   r¸   r   )r¸   )Úcumsumry  r·   rv   rµ   r‰   Úzerosr³   r¸   r´   ÚfliprÐ   )r!   rz  r|   rj  Únon_padded_lengthsÚoutput_lengthsrJ  s          r$   Ú"_get_feature_vector_attention_maskz7WavLMPreTrainedModel._get_feature_vector_attention_mask³  só   € ð
 ,×2Ñ2°rÐ2Ó:º1¸b¸5ÑAÐà×>Ñ>Ð?QÐ_jÐ>ÓkˆØ'×*Ñ*¬5¯:©:Ó6ˆà#×)Ñ)¨!Ñ,ˆ
äŸ™ØÐ.Ð/°~×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ˆØÐr%   rc   )r,   r-   r.   rÎ   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_supports_flash_attn_2Ú_supports_sdparh  r   rv   rÓ   rÏ   r   rÐ   ry  r‚  r	  r%   r$   rR  rR  n  sƒ   „ ñð
 €LØÐØ$€OØ&*Ð#Ø"ÐØ€Nò9ðD Z^ñØ" 5×#3Ñ#3°SÐ#8Ñ9ðØHPÐQUÉóð0 Y]ñØ%(ðØ:?×:JÑ:Jôr%   rR  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚWavLMNoLayerNormConvLayerc                 ód  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        |j                     | _        y )Nr   r   ©r4   rr  r¥   )r   r   rY   Úin_conv_dimÚout_conv_dimr=   r>   ru  rv  Ú	conv_biasrA   r   rL   rM   ©r!   rN   Úlayer_idr#   s      €r$   r   z"WavLMNoLayerNormConvLayer.__init__É  s—   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô ! ×!?Ñ!?Ñ@ˆ�r%   c                 óJ   — | j                  |«      }| j                  |«      }|S rc   )rA   rM   r(   s     r$   r*   z!WavLMNoLayerNormConvLayer.forward×  s$   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØÐr%   ©r   r+   r0   s   @r$   rŠ  rŠ  È  s   ø„ õAör%   rŠ  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚWavLMLayerNormConvLayerc                 ó°  •— 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   rY   r�  rŽ  r=   r>   ru  rv  r�  rA   rX   r[   r   rL   rM   r�  s      €r$   r   z WavLMLayerNormConvLayer.__init__Þ  s¯   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô Ÿ,™, t×'8Ñ'8ÈTÔRˆŒÜ  ×!?Ñ!?Ñ@ˆ�r%   c                 ó´   — | j                  |«      }|j                  dd«      }| j                  |«      }|j                  dd«      }| j                  |«      }|S )NrB  rU   )rA   rQ   r[   rM   r(   s     r$   r*   zWavLMLayerNormConvLayer.forwardí  sV   € ØŸ	™	 -Ó0ˆà%×/Ñ/°°BÓ7ˆØŸ™¨Ó6ˆØ%×/Ñ/°°BÓ7ˆàŸ™¨Ó6ˆØÐr%   r“  r+   r0   s   @r$   r•  r•  Ý  s   ø„ õAör%   r•  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚWavLMGroupNormConvLayerc                 óÆ  •— 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)r1  Únum_channelsÚaffine)r   r   rY   r�  rŽ  r=   r>   ru  rv  r�  rA   r   rL   rM   rc  r[   r�  s      €r$   r   z WavLMGroupNormConvLayer.__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ˆ�r%   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rc   )rA   r[   rM   r(   s     r$   r*   zWavLMGroupNormConvLayer.forward	  s2   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØÐr%   r“  r+   r0   s   @r$   rš  rš  ø  s   ø„ õrö r%   rš  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚWavLMFeatureEncoderz.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   )r‘  r   r#  z`config.feat_extract_norm` is z), but has to be one of ['group', 'layer']FT)r   r   Úfeat_extract_normrš  r  Únum_feat_extract_layersrŠ  r•  ro   r=   r   Úconv_layersr  Ú_requires_grad)r!   rN   r  r¥  r#   s       €r$   r   zWavLMFeatureEncoder.__init__  sê   ø€ Ü‰ÑÔà×#Ñ# wÒ.Ü2°6ÀAÔFÐGÜKPÐQW×QoÑQoÐrsÑQsÓKtöKØFGÔ)¨&¸1¸q¹5ÖAòKñ ‰Kð ×%Ñ%¨Ò0ÜPUÐV\×VtÑVtÓPuÖvÈ1Ô2°6ÀAÖFÐvˆKÑväØ0°×1IÑ1IÐ0JÐJsÐtóð ô Ÿ=™=¨Ó5ˆÔØ&+ˆÔ#Ø"ˆÕùòKùò ws   ÁC"Â	C'c                 óJ   — | j                  «       D ]	  }d|_        Œ d| _        y )NF)Ú
parametersÚrequires_gradr¦  ©r!   Úparams     r$   Ú_freeze_parametersz&WavLMFeatureEncoder._freeze_parameters$  s(   € Ø—_‘_Ó&ò 	(ˆEØ"'ˆEÕð	(à#ˆÕr%   c                 ó
  — |d d …d f   }| j                   r| j                  rd|_        | j                  D ]K  }| j                   r5| j                  r)| j                  r| j                  |j                  |«      }ŒD ||«      }ŒM |S )NT)r¦  r¦   r©  r¥  r  r  r  )r!   rT  r)   Ú
conv_layers       r$   r*   zWavLMFeatureEncoder.forward)  s…   € Ø$¢Q¨ WÑ-ˆð ×Ò 4§=¢=Ø*.ˆMÔ'à×*Ñ*ò 	:ˆJØ×"Ò" t×'BÒ'BÀtÇ}Â}Ø $× AÑ AØ×'Ñ'Ø!ó!‘ñ
 !+¨=Ó 9‘ð	:ð Ðr%   )r,   r-   r.   rÎ   r   r¬  r*   r/   r0   s   @r$   r   r     s   ø„ Ù8ô#ò"$ö
r%   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMAdapterLayerc                 ó¶   •— t         ‰| �  «        t        j                  |j                  d|j                  z  |j
                  |j                  d¬«      | _        y )Nr   r   )rr  r5   )r   r   r=   r>   Úoutput_hidden_sizeÚadapter_kernel_sizerx  rA   ra   s     €r$   r   zWavLMAdapterLayer.__init__=  sJ   ø€ Ü‰ÑÔÜ—I‘IØ×%Ñ%Ø�×)Ñ)Ñ)Ø×&Ñ&Ø×(Ñ(Øô
ˆ�	r%   c                 ój   — | j                  |«      }t        j                  j                  |d¬«      }|S )Nr   r‚   )rA   r=   rC  Úglur(   s     r$   r*   zWavLMAdapterLayer.forwardG  s/   € ØŸ	™	 -Ó0ˆÜŸ™×)Ñ)¨-¸QÐ)Ó?ˆàÐr%   r+   r0   s   @r$   r°  r°  <  s   ø„ ô
ör%   r°  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMAdapterc                 ó¨  •‡— t         ‰| �  «        ‰j                  ‰j                  k7  rTt	        j
                  ‰j                  ‰j                  «      | _        t	        j                  ‰j                  «      | _        nd x| _        | _        t	        j                  ˆfd„t        ‰j                  «      D «       «      | _        ‰j                  | _        y )Nc              3   ó4   •K  — | ]  }t        ‰«      –— Œ y ­wrc   )r°  )r  r’   rN   s     €r$   r  z(WavLMAdapter.__init__.<locals>.<genexpr>Y  s   øè ø€ Ò#hÀ!Ô$5°f×$=Ñ#hùs   ƒ)r   r   r²  r?   r=   r\   ÚprojrX   Úproj_layer_normr   r  rw  r  r  ra   s    `€r$   r   zWavLMAdapter.__init__O  s–   ù€ Ü‰ÑÔð ×$Ñ$¨×(:Ñ(:Ò:ÜŸ	™	 &×"4Ñ"4°f×6OÑ6OÓPˆDŒIÜ#%§<¡<°×0IÑ0IÓ#JˆDÕ à/3Ð3ˆDŒI˜Ô,ä—m‘mÓ#hÄuÈV×MfÑMfÓGgÔ#hÓhˆŒØ×)Ñ)ˆ�r%   c                 óh  — | j                   �.| j                  �"| j                  |«      }| j                  |«      }|j                  dd«      }| j                  D ]D  }t        j
                  j                  «       }| j                  r|| j                  kD  sŒ= ||«      }ŒF |j                  dd«      }|S rP   )rº  r»  rQ   r  ÚnpÚrandomr¦   r  )r!   r)   r#  Úlayerdrop_probs       r$   r*   zWavLMAdapter.forward\  s¢   € à�9‰9Ð  T×%9Ñ%9Ð%EØ ŸI™I mÓ4ˆMØ ×0Ñ0°Ó?ˆMà%×/Ñ/°°1Ó5ˆà—[‘[ò 	5ˆEÜŸY™Y×-Ñ-Ó/ˆNØ—=’= ^°d·n±nÓ%DÙ % mÓ 4‘ð	5ð
 &×/Ñ/°°1Ó5ˆØÐr%   r+   r0   s   @r$   r·  r·  N  s   ø„ ô*ör%   r·  r‰   Ú	mask_probÚmask_lengthr|   Ú	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 )af  
    Computes random mask spans for a given shape. Used to implement [SpecAugment: A Simple Data Augmentation Method for
    ASR](https://arxiv.org/abs/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)rq  Únum_masked_spanÚepsilonrÁ  rÀ  rÂ  rK  s     €€€€€r$   Ú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àÐr%   NrU   r²   r   F)Úreplace)ro   r½  r¾  r  ÚitemÚdetachr‹   Útolistr  r~  rÐ   Úchoicer´   ÚlenÚconcatenaterw   Úint32ÚappendÚarrayr§   ÚreshaperÆ  Úput_along_axis)r‰   rÀ  rÁ  r|   rÂ  rJ  rÉ  r’   ri  Úspec_aug_maskÚspec_aug_mask_idxsÚmax_num_masked_spanrq  rÇ  Úspec_aug_mask_idxÚdummy_mask_idxÚoffsetsrÈ  rK  s    `` `            @@r$   Ú_compute_mask_indicesrÜ  m  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+)r   i$  i   a‰  
    WavLM was proposed in [WavLM: Unified Speech Representation Learning with Labeled and Unlabeled
    Data](https://arxiv.org/abs/2110.13900) by Sanyuan Chen, Chengyi Wang, Zhengyang Chen, Yu Wu, Shujie Liu, Zhuo
    Chen, Jinyu Li, Naoyuki Kanda, Takuya Yoshioka, Xiong Xiao, Jian Wu, Long Zhou, Shuo Ren, Yanmin Qian, Yao Qian,
    Jian Wu, Michael Zeng, Xiangzhan Yu, Furu Wei.

    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading or saving etc.).

    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`WavLMConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aI  
    Args:
        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]` or a `numpy.ndarray`, *e.g.* via 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 [`Wav2Vec2Processor.__call__`] for details.
        attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing convolution and attention on padding token indices. Mask values selected in `[0,
            1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)

            <Tip warning={true}>

            `attention_mask` should only be passed if the corresponding processor has `config.return_attention_mask ==
            True`. For all models whose processor has `config.return_attention_mask == False`, `attention_mask` should
            **not** be passed to avoid degraded performance when doing batched inference. For such models
            `input_values` should simply be padded with 0 and passed without `attention_mask`. Be aware that these
            models also yield slightly different results depending on whether `input_values` is padded or not.

            </Tip>

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
z_The bare WavLM Model transformer outputting raw hidden-states without any specific head on top.c                   ób  ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Z	 	 ddej                  de	ej                     de	ej                     fd„Z ee«       eeeed	e¬
«      	 	 	 	 	 dde	ej&                     de	ej&                     de	ej                     de	e   de	e   de	e   deeef   fd„«       «       Zˆ xZS )Ú
WavLMModelrN   c                 óî  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |j                  dkD  s|j                  dkD  rEt        j                  t        j                  |j                  «      j                  «       «      | _        |j                   rt#        |«      | _        nt'        |«      | _        |j(                  rt+        |«      nd | _        | j/                  «        y )NrÌ   )r   r   rN   r   Úfeature_extractorrS   Úfeature_projectionÚmask_time_probÚmask_feature_probr=   ru   rv   rÑ   r?   r]  Úmasked_spec_embedÚdo_stable_layer_normr)  Úencoderrü   rj  r·  ÚadapterÚ	post_initra   s     €r$   r   zWavLMModel.__init__&  sº   ø€ Ü‰Ñ˜Ô ØˆŒÜ!4°VÓ!<ˆÔÜ"8¸Ó"@ˆÔð × Ñ  3Ò&¨&×*BÑ*BÀSÒ*HÜ%'§\¡\´%·,±,¸v×?QÑ?QÓ2R×2[Ñ2[Ó2]Ó%^ˆDÔ"à×&Ò&Ü6°vÓ>ˆD�Lä'¨Ó/ˆDŒLà/5×/AÒ/A”| FÔ+ÀtˆŒð 	�‰Õr%   c                 óX   — t        j                  dt        «       | j                  «        y©z©
        Calling this function will disable the gradient computation for the feature encoder so that its parameters will
        not be updated during training.
        úžThe method `freeze_feature_extractor` is deprecated and will be removed in Transformers v5. Please use the equivalent `freeze_feature_encoder` method instead.N©ÚwarningsÚwarnÚFutureWarningÚfreeze_feature_encoder©r!   s    r$   Úfreeze_feature_extractorz#WavLMModel.freeze_feature_extractor:  ó'   € ô
 	�‰ðQäô	
ð
 	×#Ñ#Õ%r%   c                 ó8   — | j                   j                  «        y©ú¨
        Calling this function will disable the gradient computation for the feature encoder so that its parameter will
        not be updated during training.
        N)rà  r¬  rñ  s    r$   rð  z!WavLMModel.freeze_feature_encoderF  s   € ð
 	×Ñ×1Ñ1Õ3r%   r)   Ú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://arxiv.org/abs/1904.08779).
        Úapply_spec_augmentTNr   )rÀ  rÁ  r|   rÂ  )r¸   r³   )rÀ  rÁ  rÂ  rU   )ÚgetattrrN   r„   rä  r·   r³   râ  r¦   rÜ  Úmask_time_lengthÚmask_time_min_masksrv   Útensorr¸   rÐ   rã  Úmask_feature_lengthÚmask_feature_min_masksÚexpand)r!   r)   r÷  r|   rJ  rK  r?   Úmask_feature_indicess           r$   Ú_mask_hidden_stateszWavLMModel._mask_hidden_statesM  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Ð.Ñ/àÐr%   Úaudio©Ú
checkpointÚoutput_typerƒ  ÚmodalityÚexpected_outputrT  r~   r  r  r   c                 óH  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |«      }|j                  dd«      }|�!| j                  |j                  d   |d¬«      }| j                  |«      \  }}| j                  |||¬«      }| j                  |||||¬«      }	|	d   }| j                  �| j                  |«      }|s
||f|	dd  z   S t        |||	j                  |	j                  ¬«      S )	Nr   r   Fr|  )r÷  r|   ©r|   r~   r  r  r   )r  Úextract_featuresr)   r  )rN   r~   r  Úuse_return_dictrà  rQ   r‚  r‰   rá  r  ræ  rç  ÚWavLMBaseModelOutputr)   r  )
r!   rT  r|   r÷  r~   r  r  r  r)   Úencoder_outputss
             r$   r*   zWavLMModel.forward{  sb  € ð" 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà×1Ñ1°,Ó?ÐØ+×5Ñ5°a¸Ó;ÐàÐ%à!×DÑDØ ×&Ñ& qÑ)¨>Àuð Eó ˆNð +/×*AÑ*AÐBRÓ*SÑ'ˆÐ'Ø×0Ñ0ØÐ->È~ð 1ó 
ˆð Ÿ,™,ØØ)Ø/Ø!5Ø#ð 'ó 
ˆð (¨Ñ*ˆà�<‰<Ð#Ø ŸL™L¨Ó7ˆMáØ!Ð#3Ð4°ÀqÀrÐ7JÑJÐJä#Ø+Ø-Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r%   )NN©NNNNN)r,   r-   r.   r   r   rò  rð  rv   rÒ   r   rÓ   r  r   ÚWAVLM_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr  Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPErÑ   rÐ   r   r   r*   r/   r0   s   @r$   rÞ  rÞ  !  s  ø„ ð
˜{õ ò(
&ò4ð :>Ø59ñ	,à×(Ñ(ð,ð $ E×$5Ñ$5Ñ6ð,ð ! ×!1Ñ!1Ñ2ó	,ñ\ +Ð+AÓBÙØ&Ø(Ø$ØØ.ôð 26Ø9=Ø,0Ø/3Ø&*ñ2
à˜uŸ|™|Ñ,ð2
ð ! §¡Ñ.ð2
ð $ E×$5Ñ$5Ñ6ð	2
ð
 $ D™>ð2
ð ' t™nð2
ð ˜d‘^ð2
ð 
ˆuÐ*Ð*Ñ	+ò2
óó Cô2
r%   rÞ  r   zZ'mister quilter is the aposle of the middle classes and we are glad to welcome his gospel'g…ëQ¸)@zcWavLM Model with a `language modeling` head on top for Connectionist Temporal Classification (CTC).c                   ó  ‡ — e Zd Zddee   fˆ fd„Zd„ Zd„ Zd„ Zd„ Z	 e
e«       eeeeee¬«      	 	 	 	 	 ddeej&                     d	eej&                     d
ee   dee   dee   deej&                     deeef   fd„«       «       Zˆ xZS )ÚWavLMForCTCÚ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 )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: `WavLMForCTC.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.rj  )r   r   rÞ  rS  r=   r^   Úfinal_dropoutr`   r  Ú
vocab_sizero   r#   rC   rj  r²  r?   r\   Úlm_headrè  )r!   rN   r  r²  r#   s       €r$   r   zWavLMForCTC.__init__Ã  s½   ø€ Ü‰Ñ˜Ô ä Ó'ˆŒ
Ü—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ˆŒð 	�‰Õr%   c                 óö   — | 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.
        NÚ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ú  rN   ro   ÚloggerÚinfoÚload_adapter)r!   r  s     r$   Útie_weightszWavLMForCTC.tie_weightsÚ  sƒ   € ð ×&Ñ&ˆàÐ"¤w¨t¯{©{Ð<NÐPTÓ'UÐ']ÜÐ:¸;¸-ÐGtÐuÓvÐvØÐ ¤W¨T¯[©[Ð:LÈdÓ%SÐ%_Ü�K‰KÐCÕDØÐ$Ø×Ñ˜k°dÐÕ;ð %r%   c                 óX   — t        j                  dt        «       | j                  «        y©rö  rë  Nrì  rñ  s    r$   rò  z$WavLMForCTC.freeze_feature_extractorï  ró  r%   c                 óL   — | j                   j                  j                  «        yrõ  ©rS  rà  r¬  rñ  s    r$   rð  z"WavLMForCTC.freeze_feature_encoderû  ó   € ð
 	�
‰
×$Ñ$×7Ñ7Õ9r%   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©rS  r¨  r©  rª  s     r$   Úfreeze_base_modelzWavLMForCTC.freeze_base_model  ó(   € ð
 —Z‘Z×*Ñ*Ó,ò 	(ˆEØ"'ˆEÕñ	(r%   )r  r  rƒ  r  Úexpected_lossrT  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²   rU   )r;   r³   r   F)Úenabled)ÚblankÚ	reductionÚzero_infinity©ÚlossÚlogitsr)   r  )rN   r  rÆ  r  ro   rS  r`   r  rv   Ú	ones_likerµ   ry  r‹   r·   Úmasked_selectr=   rC  Úlog_softmaxÚfloat32rQ   ÚbackendsÚcudnnÚflagsÚctc_lossÚpad_token_idÚctc_loss_reductionÚctc_zero_infinityÚ_HIDDEN_STATES_START_POSITIONr   r)   r  )r!   rT  r|   r~   r  r  r-  rô   r)   r5  r4  ri  Úlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probsÚoutputs                    r$   r*   zWavLMForCTC.forward
  s'  € ð0 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐ &§*¡*£,°$·+±+×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rc   r  )r,   r-   r.   r   rÞ   r   r!  rò  rð  r*  r   r  r   r  r   r  Ú_CTC_EXPECTED_OUTPUTÚ_CTC_EXPECTED_LOSSrv   rÑ   rÐ   r   r   r*   r/   r0   s   @r$   r  r  ¾  sí   ø„ ñ
¨H°S©Mõ ò.<ò*
&ò:ò(ñ +Ð+AÓBÙØ&Ø"Ø$Ø,Ø(ôð 26Ø,0Ø/3Ø&*Ø)-ñD
à˜uŸ|™|Ñ,ðD
ð ! §¡Ñ.ðD
ð $ D™>ð	D
ð
 ' t™nðD
ð ˜d‘^ðD
ð ˜Ÿ™Ñ&ðD
ð 
ˆu�nÐ$Ñ	%òD
óó CôD
r%   r  z”
    WavLM 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d„ Z ee«       e	e
eed¬«      	 	 	 	 	 ddeej                     deej                     d	ee   d
ee   dee   deej                     deeef   fd„«       «       Zˆ xZS )ÚWavLMForSequenceClassificationc                 óü  •— 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 )Nrj  z\Sequence classification does not support the use of WavLM adapters (config.add_adapter=True)r   )r   r   rC   rj  ro   rÞ  rS  r  Úuse_weighted_layer_sumr=   ru   rv   rw   Úlayer_weightsr\   r?   Úclassifier_proj_sizeÚ	projectorÚ
num_labelsÚ
classifierrè  ©r!   rN   Ú
num_layersr#   s      €r$   r   z'WavLMForSequenceClassification.__init__a  sÀ   ø€ Ü‰Ñ˜Ô ä�6˜=Ô)¨f×.@Ò.@ÜØnóð ô   Ó'ˆŒ
Ø×-Ñ-°Ñ1ˆ
Ø×(Ò(Ü!#§¡¬e¯j©j¸Ó.DÀzÑ.QÓ!RˆDÔÜŸ™ 6×#5Ñ#5°v×7RÑ7RÓSˆŒÜŸ)™) F×$?Ñ$?À×ARÑARÓSˆŒð 	�‰Õr%   c                 óX   — t        j                  dt        «       | j                  «        yrê  rì  rñ  s    r$   rò  z7WavLMForSequenceClassification.freeze_feature_extractorr  ró  r%   c                 óL   — | j                   j                  j                  «        yrõ  r%  rñ  s    r$   rð  z5WavLMForSequenceClassification.freeze_feature_encoder~  r&  r%   c                 óP   — | j                   j                  «       D ]	  }d|_        Œ yr(  r)  rª  s     r$   r*  z0WavLMForSequenceClassification.freeze_base_model…  r+  r%   r  )r  r  rƒ  r  rT  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 )á�  
        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‚   rU   r   r   rÌ   r3  )rN   r  rL  rS  rA  rv   Ústackr=   rC  rF  rM  rˆ   r‹   rO  r9  r‚  r‰   r†   r‡   rQ  r   rP  r   r)   r  )r!   rT  r|   r~   r  r  r-  rô   r)   Únorm_weightsÚpooled_outputÚpadding_maskÚexpand_padding_maskr5  r4  Úloss_fctrF  s                    r$   r*   z&WavLMForSequenceClassification.forward�  s  € ð. &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ'+§{¡{×'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ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r%   r  )r,   r-   r.   r   rò  rð  r*  r   r  r   r  r   r  r   rv   rÑ   rÐ   r   r   r*   r/   r0   s   @r$   rJ  rJ  Y  sÒ   ø„ ôò"
&ò:ò(ñ +Ð+AÓBÙØ&Ø,Ø$Øô	ð 26Ø,0Ø/3Ø&*Ø)-ñ<
à˜uŸ|™|Ñ,ð<
ð ! §¡Ñ.ð<
ð $ D™>ð	<
ð
 ' t™nð<
ð ˜d‘^ð<
ð ˜Ÿ™Ñ&ð<
ð 
ˆuÐ.Ð.Ñ	/ò<
óó Cô<
r%   rJ  zmicrosoft/wavlm-base-plus-sdza
    WavLM Model with a frame classification head on top for tasks like Speaker Diarization.
    c                   ó   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Z ee«       e	e
eede¬«      	 	 	 	 	 ddeej                      deej                      d	eej                      d
ee   dee   dee   deeef   fd„«       «       Zˆ xZS )Ú WavLMForAudioFrameClassificationc                 óÀ  •— t         ‰| �  |«       t        |d«      r|j                  rt	        d«      ‚t        |«      | _        |j                  dz   }|j                  r0t        j                  t        j                  |«      |z  «      | _        t        j                  |j                  |j                   «      | _        |j                   | _        | j%                  «        y )Nrj  z_Audio frame classification does not support the use of WavLM adapters (config.add_adapter=True)r   )r   r   rC   rj  ro   rÞ  rS  r  rL  r=   ru   rv   rw   rM  r\   r?   rP  rQ  Úinit_weightsrR  s      €r$   r   z)WavLMForAudioFrameClassification.__init__Þ  s¯   ø€ Ü‰Ñ˜Ô ä�6˜=Ô)¨f×.@Ò.@ÜØqóð ô   Ó'ˆŒ
Ø×-Ñ-°Ñ1ˆ
Ø×(Ò(Ü!#§¡¬e¯j©j¸Ó.DÀzÑ.QÓ!RˆDÔÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒØ ×+Ñ+ˆŒà×ÑÕr%   c                 óX   — t        j                  dt        «       | j                  «        yr#  rì  rñ  s    r$   rò  z9WavLMForAudioFrameClassification.freeze_feature_extractorî  ró  r%   c                 óL   — | j                   j                  j                  «        yrõ  r%  rñ  s    r$   rð  z7WavLMForAudioFrameClassification.freeze_feature_encoderú  r&  r%   c                 óP   — | j                   j                  «       D ]	  }d|_        Œ yr(  r)  rª  s     r$   r*  z2WavLMForAudioFrameClassification.freeze_base_model  r+  r%   r  r  rT  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                  |«      }
d}|�\t        «       } ||
j                  d| j                  «      t        j                   |j                  d| j                  «      d¬«      «      }|s|
f|t        d z   }|S t#        ||
|j$                  |j&                  ¬	«      S )
rX  NTr
  r   r‚   rU   r   )Úaxisr3  )rN   r  rL  rS  rA  rv   rY  r=   rC  rF  rM  rˆ   r‹   rQ  r   rP  rG  r   r)   r  )r!   rT  r|   r-  r~   r  r  rô   r)   rZ  r5  r4  r^  rF  s                 r$   r*   z(WavLMForAudioFrameClassification.forward	  sh  € ð0 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ'+§{¡{×'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à—‘ Ó/ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¼e¿l¹lÈ6Ï;É;ÐWYÐ[_×[jÑ[jÓKkÐrsÔ>tÓuˆDáØ�Y Ô)FÐ)GÐ!HÑHˆFØˆMä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r%   r  )r,   r-   r.   r   rò  rð  r*  r   r  r   Ú_FRAME_CLASS_CHECKPOINTr   r  Ú_FRAME_EXPECTED_OUTPUTr   rv   rÑ   rÐ   r   r   r*   r/   r0   s   @r$   r`  r`  ×  sÕ   ø„ ôò 
&ò:ò(ñ +Ð+AÓBÙØ*Ø)Ø$ØØ.ôð 26Ø)-Ø,0Ø/3Ø&*ñ3
à˜uŸ|™|Ñ,ð3
ð ! §¡Ñ.ð3
ð ˜Ÿ™Ñ&ð	3
ð
 $ D™>ð3
ð ' t™nð3
ð ˜d‘^ð3
ð 
ˆuÐ+Ð+Ñ	,ò3
óó Cô3
r%   r`  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚAMSoftmaxLossc                 óæ   •— t         t        | �  «        || _        || _        || _        t        j                  t        j                  ||«      d¬«      | _
        t        j                  «       | _        y )NT)r©  )r   rk  r   ÚscaleÚmarginrP  r=   ru   rv   Úrandnr9   r   r4  )r!   Ú	input_dimrP  rm  rn  r#   s        €r$   r   zAMSoftmaxLoss.__init__H  sS   ø€ ÜŒm˜TÑ+Ô-ØˆŒ
ØˆŒØ$ˆŒÜ—l‘l¤5§;¡;¨y¸*Ó#EÐUYÔZˆŒÜ×'Ñ'Ó)ˆ�	r%   c                 óä  — |j                  «       }t        j                  j                  | j                  d¬«      }t        j                  j                  |d¬«      }t        j                  ||«      }|| j                  z
  }t        j                  j                  || j                  «      }| j                  t        j                  |j                  «       ||«      z  }| j                  ||«      }|S )Nr   r‚   r   )Úflattenr=   rC  Ú	normalizer9   rv   Úmmrn  Úone_hotrP  rm  rÆ   rÐ   r4  )	r!   r)   r-  r9   Ú	cos_thetaÚpsiÚonehotr5  r4  s	            r$   r*   zAMSoftmaxLoss.forwardP  s²   € Ø—‘Ó!ˆÜ—‘×(Ñ(¨¯©¸!Ð(Ó<ˆÜŸ™×/Ñ/°À1Ð/ÓEˆÜ—H‘H˜]¨FÓ3ˆ	Ø˜$Ÿ+™+Ñ%ˆä—‘×&Ñ& v¨t¯©Ó?ˆØ—‘œeŸk™k¨&¯+©+«-¸¸iÓHÑHˆØ�y‰y˜ Ó(ˆàˆr%   )g      >@gš™™™™™Ù?r+   r0   s   @r$   rk  rk  G  s   ø„ õ*ör%   rk  c                   óX   ‡ — e Zd Zdˆ fd„	Zdej
                  dej
                  fd„Zˆ xZS )Ú	TDNNLayerc                 óš  •— t         ‰| �  «        |dkD  r|j                  |dz
     n|j                  |   | _        |j                  |   | _        |j
                  |   | _        |j                  |   | _        t        j                  | j                  | j                  z  | j                  «      | _        t        j                  «       | _        y )Nr   r   )r   r   Útdnn_dimr�  rŽ  Útdnn_kernelr4   Útdnn_dilationÚdilationr=   r\   ÚkernelÚReLUrM   r�  s      €r$   r   zTDNNLayer.__init___  s¡   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈfÏoÉoÐ^fÑNgˆÔØ"ŸO™O¨HÑ5ˆÔØ!×-Ñ-¨hÑ7ˆÔØ×,Ñ,¨XÑ6ˆŒä—i‘i × 0Ñ 0°4×3CÑ3CÑ CÀT×EVÑEVÓWˆŒÜŸ'™'›)ˆ�r%   r)   r   c                 ó&  — t        «       rddlm} t        «       r+t        | j                  «      rt        j                  d«       |j                  dd«      }| j                  j                  j                  | j                  | j                  | j                  «      j                  dd«      }t        j                  j                  ||| j                  j                   | j"                  ¬«      }|j                  dd«      }| j%                  |«      }|S )Nr   )Ú	LoraLayerz‡Detected LoRA on TDNNLayer. LoRA weights won't be applied due to optimization. You should exclude TDNNLayer from LoRA's target modules.r   r   )r  )r   Úpeft.tuners.lorarƒ  rÜ   r€  rí  rî  rQ   r9   rˆ   rŽ  r4   r�  r=   rC  Úconv1dr¥   r  rM   )r!   r)   rƒ  r9   s       r$   r*   zTDNNLayer.forwardi  sØ   € ÜÔÝ2äÔÜ˜$Ÿ+™+ yÔ1Ü—‘ðOôð &×/Ñ/°°1Ó5ˆØ—‘×#Ñ#×(Ñ(¨×):Ñ):¸D×<LÑ<LÈd×N^ÑN^Ó_×iÑiÐjkÐmnÓoˆÜŸ™×,Ñ,¨]¸FÀDÇKÁK×DTÑDTÐ_c×_lÑ_lÐ,ÓmˆØ%×/Ñ/°°1Ó5ˆàŸ™¨Ó6ˆØÐr%   r“  )r,   r-   r.   r   rv   rÑ   r*   r/   r0   s   @r$   rz  rz  ^  s#   ø„ õ$ð U§\¡\ð °e·l±l÷ r%   rz  zmicrosoft/wavlm-base-plus-svg
×£p=
ï?zi
    WavLM Model with an XVector feature extraction head on top for tasks like Speaker Verification.
    c                   ó*  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zdeej                  e
f   fd„Z ee«       eeeede¬«      	 	 	 	 	 dd	eej(                     d
eej(                     dee   dee   dee   deej(                     deeef   fd„«       «       Zˆ xZS )ÚWavLMForXVectorc                 ó  •— t         ‰| �  |«       t        |«      | _        |j                  dz   }|j
                  r0t        j                  t        j                  |«      |z  «      | _
        t        j                  |j                  |j                  d   «      | _        t        t!        |j                  «      «      D �cg c]  }t#        ||«      ‘Œ }}t        j$                  |«      | _        t        j                  |j                  d   dz  |j(                  «      | _        t        j                  |j(                  |j(                  «      | _        t/        |j(                  |j0                  «      | _        | j5                  «        y c c}w )Nr   r   rU   r   )r   r   rÞ  rS  r  rL  r=   ru   rv   rw   rM  r\   r?   r|  rO  r  rÏ  rz  r   ÚtdnnÚxvector_output_dimrà  rQ  rk  rP  Ú	objectiverb  )r!   rN   rS  r  Útdnn_layersr#   s        €r$   r   zWavLMForXVector.__init__‰  s  ø€ Ü‰Ñ˜Ô ä Ó'ˆŒ
Ø×-Ñ-°Ñ1ˆ
Ø×(Ò(Ü!#§¡¬e¯j©j¸Ó.DÀzÑ.QÓ!RˆDÔÜŸ™ 6×#5Ñ#5°v·±ÀqÑ7IÓJˆŒä5:¼3¸v¿¹Ó;OÓ5PÖQ°”y ¨Õ+ÐQˆÐQÜ—M‘M +Ó.ˆŒ	ä!#§¡¨6¯?©?¸2Ñ+>ÀÑ+BÀF×D]ÑD]Ó!^ˆÔÜŸ)™) F×$=Ñ$=¸v×?XÑ?XÓYˆŒä& v×'@Ñ'@À&×BSÑBSÓTˆŒà×ÑÕùò Rs   Â>Fc                 óX   — t        j                  dt        «       | j                  «        yr#  rì  rñ  s    r$   rò  z(WavLMForXVector.freeze_feature_extractorœ  ró  r%   c                 óL   — | j                   j                  j                  «        yrõ  r%  rñ  s    r$   rð  z&WavLMForXVector.freeze_feature_encoder¨  r&  r%   c                 óP   — | j                   j                  «       D ]	  }d|_        Œ yr(  r)  rª  s     r$   r*  z!WavLMForXVector.freeze_base_model¯  r+  r%   ri  c                 óV   — d„ }| j                   j                  D ]  } |||d«      }Œ |S )z?
        Computes the output length of the TDNN layers
        c                 ó   — | |z
  |z  dz   S )Nr   r	  rp  s      r$   rs  zBWavLMForXVector._get_tdnn_output_lengths.<locals>._conv_out_length¼  s   € ð ! ;Ñ.°6Ñ9¸AÑ=Ð=r%   r   )rN   r}  )r!   ri  rs  r4   s       r$   Ú_get_tdnn_output_lengthsz(WavLMForXVector._get_tdnn_output_lengths·  s:   € ò
	>ð
  Ÿ;™;×2Ñ2ò 	LˆKÙ,¨]¸KÈÓK‰Mð	Lð Ðr%   r  r  rT  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 ]
  }
 |
|«      }Œ |€%|j                  d¬«      }|j!                  d¬«      }nÃ| j#                  |j                  d¬«      «      }| j%                  |«      }g }g }t'        |«      D ]U  \  }}|j)                  ||d|…f   j                  d¬«      «       |j)                  ||d|…f   j!                  d¬«      «       ŒW t        j                  |«      }t        j                  |«      }t        j*                  ||gd¬«      }| j-                  |«      }| j/                  |«      }d}|�| j1                  ||«      }|s||f|t        d z   }|�|f|z   S |S t3        ||||j4                  |j6                  ¬«      S )	rX  NTr
  r   r‚   rU   r   )r4  r5  Ú
embeddingsr)   r  )rN   r  rL  rS  rA  rv   rY  r=   rC  rF  rM  rˆ   r‹   rO  r‰  r9  rV  ry  r’  r  rÒ  r¤   rà  rQ  r‹  r   r)   r  )r!   rT  r|   r~   r  r  r-  rô   r)   rZ  Ú
tdnn_layerÚmean_featuresÚstd_featuresÚfeat_extract_output_lengthsÚtdnn_output_lengthsr  ÚlengthÚstatistic_poolingÚoutput_embeddingsr5  r4  rF  s                         r$   r*   zWavLMForXVector.forwardÆ  s™  € ð0 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ'+§{¡{×'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ˆàŸ)™)ò 	6ˆJÙ& }Ó5‰Mð	6ð Ð!Ø)×.Ñ.°1Ð.Ó5ˆMØ(×,Ñ,°Ð,Ó3‰Là*.×*OÑ*OÐP^×PbÑPbÐghÐPbÓPiÓ*jÐ'Ø"&×"?Ñ"?Ð@[Ó"\ÐØˆMØˆLÜ&Ð':Ó;ò J‘	��6Ø×$Ñ$ ]°1°g°v°g°:Ñ%>×%CÑ%CÈÐ%CÓ%JÔKØ×#Ñ# M°!°W°f°W°*Ñ$=×$AÑ$AÀaÐ$AÓ$HÕIðJô "ŸK™K¨Ó6ˆMÜ Ÿ;™; |Ó4ˆLÜ!ŸI™I }°lÐ&CÈÔLÐà ×2Ñ2Ð3DÓEÐØ—‘Ð!2Ó3ˆàˆØÐØ—>‘> &¨&Ó1ˆDáØÐ/Ð0°7Ô;XÐ;YÐ3ZÑZˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØØØ(Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r%   r  )r,   r-   r.   r   rò  rð  r*  r   rv   rÓ   rÏ   r’  r   r  r   Ú_XVECTOR_CHECKPOINTr   r  Ú_XVECTOR_EXPECTED_OUTPUTr   rÑ   rÐ   r   r*   r/   r0   s   @r$   r‡  r‡  ‚  sù   ø„ ôò&
&ò:ò(ð°e¸E×<LÑ<LÈcÐ<QÑ6Ró ñ +Ð+AÓBÙØ&Ø!Ø$ØØ0ôð 26Ø,0Ø/3Ø&*Ø)-ñI
à˜uŸ|™|Ñ,ðI
ð ! §¡Ñ.ðI
ð $ D™>ð	I
ð
 ' t™nðI
ð ˜d‘^ðI
ð ˜Ÿ™Ñ&ðI
ð 
ˆu�mÐ#Ñ	$òI
óó CôI
r%   r‡  )r`  r  rJ  r‡  rÞ  rR  r'   )UrÃ   rí  Útypingr   r   r   Únumpyr½  rv   Útorch.nnr=   Útorch.nn.functionalrC  r¡   r   Úactivationsr   Úintegrations.deepspeedr	   Úintegrations.fsdpr
   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   rB   r   r   r   r   r   Úconfiguration_wavlmr   Ú
get_loggerr,   r  r  r  ÚModuler   r2   rS   rf   rÖ   rå   rø   rü   r)  r.  rR  rŠ  r•  rš  r   r°  r·  rÏ   rÂ   rÓ   ÚndarrayrÜ  r  ÚWAVLM_START_DOCSTRINGr  r  rÞ  rA  rG  rH  r  rJ  rh  ri  r`  rk  rz  r�  rž  r‡  Ú__all__r	  r%   r$   ú<module>r®     sO  ðó Û ß )Ñ )ã Û Ý ß Ð Ý %å !Ý @Ý 7÷÷ õ .÷õ õ -ð 
ˆ×	Ñ	˜HÓ	%€àIÐ à€ô˜Ÿ	™	ô ô* 2§9¡9ô *ôZ1˜RŸY™Yô 1ôc �R—Y‘Yô c ôL�r—y‘yô ô0&˜Ÿ	™	ô &ôR" r§y¡yô "ôJP
�2—9‘9ô P
ôfQ
 "§)¡)ô Q
ôhC' §¡ô C'ôLW˜?ô Wôt §	¡	ô ô*˜bŸi™iô ô6˜bŸi™iô ô0)˜"Ÿ)™)ô )ôX˜Ÿ	™	ô ô$�2—9‘9ô ðF 26ØñtØ��c�‰?ðtàðtð ðtð ˜U×-Ñ-Ñ.ð	tð
 ðtð ‡Z�Zótòn 'Ð ðÐ ð&"Ð ðH /Ð ñ ØeØóôP
Ð%ó P
ó	ðP
ðf !"Ð àsÐ ØÐ ñ ØmØóôT
Ð&ó T
ó	ðT
ñn ðð óôp
Ð%9ó p
óðp
ðf 9Ð Ø˜Q˜Ð ñ ðð ó	ôg
Ð';ó g
óðg
ôT�B—I‘Iô ô.�—	‘	ô ð@ 5Ð ØÐ ñ ðð ó	ôO
Ð*ó O
óðO
òd�r%   