§
    ‚Štj† ã                   ó  — d dl Z d dl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 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mZ ddl m!Z!m"Z"m#Z# ddl$m%Z%  e#j&        e'¦  «        Z( G d„ dej)        ¦  «        Z* G d„ dej)        ¦  «        Z+ G d„ dej)        ¦  «        Z, G d„ dej)        ¦  «        Z- G d„ dej)        ¦  «        Z. G d„ de¦  «        Z/ G d„ de¦  «        Z0 G d„ dej)        ¦  «        Z1 G d„ dej)        ¦  «        Z2 G d „ d!ej)        ¦  «        Z3e! G d"„ d#e¦  «        ¦   «         Z4 G d$„ d%e¦  «        Z5 G d&„ d'e¦  «        Z6 G d(„ d)e¦  «        Z7 G d*„ d+ej)        ¦  «        Z8 G d,„ d-ej)        ¦  «        Z9 G d.„ d/ej)        ¦  «        Z:	 	 dKd0e;e<e<f         d1e=d2e<d3ej>        dz  d4e<d5ej?        fd6„Z@eZAe! G d7„ d8e4¦  «        ¦   «         ZBd9ZC e!d:¬;¦  «         G d<„ d=e4¦  «        ¦   «         ZD e!d>¬;¦  «         G d?„ d@e4¦  «        ¦   «         ZEe! G dA„ dBe4¦  «        ¦   «         ZF G dC„ dDej)        ¦  «        ZG G dE„ dFej)        ¦  «        ZH e!dG¬;¦  «         G dH„ dIe4¦  «        ¦   «         ZIg dJ¢ZJdS )Lé    N)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úis_deepspeed_zero3_enabled)Úis_fsdp_managed_module)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚCausalLMOutputÚSequenceClassifierOutputÚTokenClassifierOutputÚWav2Vec2BaseModelOutputÚXVectorOutput)ÚPreTrainedModelÚ*get_torch_context_manager_or_global_device)Úauto_docstringÚis_peft_availableÚloggingé   )ÚWavLMConfigc                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMSamePadLayerc                 ól   •— t          ¦   «                              ¦   «          |dz  dk    rdnd| _        d S ©Né   r   r   )ÚsuperÚ__init__Únum_pad_remove)ÚselfÚnum_conv_pos_embeddingsÚ	__class__s     €úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/wavlm/modeling_wavlm.pyr   zWavLMSamePadLayer.__init__&   s:   ø€ Ý‰Œ×ÒÑÔÐØ#:¸QÑ#>À!Ò#CÐ#C˜a˜aÈˆÔÐÐó    c                 óJ   — | j         dk    r|d d …d d …d | j          …f         }|S ©Nr   )r   ©r   Úhidden_statess     r"   ÚforwardzWavLMSamePadLayer.forward*   s;   € ØÔ Ò"Ð"Ø)¨!¨!¨!¨Q¨Q¨QÐ0F°4Ô3FÐ2FÐ0FÐ*FÔGˆMØÐr#   ©Ú__name__Ú
__module__Ú__qualname__r   r(   Ú__classcell__©r!   s   @r"   r   r   %   sL   ø€ € € € € ðKð Kð Kð Kð 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        d¬¦  «        5   || j        dd¬¦  «        | _        d d d ¦  «         n# 1 swxY w Y   t          | j        d¦  «        r-| j        j        j        j        }| j        j        j        j        }n| j        j        }| j        j        }|j                             | |¦  «         |j                             | |¦  «         n || j        dd¬¦  «        | _        t-          |j        ¦  «        | _        t0          |j                 | _        d S )	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Úutilsr5   Úhasattrr:   r   Ú	deepspeedÚzeroÚGatheredParametersr7   Ú	original0Ú	original1Úweight_gÚweight_vÚregister_external_parameterr   r3   r   Úfeat_extract_activationÚ
activation)r   Úconfigr5   rB   rG   rH   r!   s         €r"   r   z%WavLMPositionalConvEmbedding.__init__1   sþ  ø€ Ý‰Œ×ÒÑÔÐÝ”IØÔØÔØÔ6ØÔ2°aÑ7ØÔ7ð
ñ 
ô 
ˆŒ	õ ”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKå%Ñ'Ô'ð 	EØÐÐÐà”×2Ò2°4´9Ô3CÐSTÐ2ÑUÔUð Ið IØ'˜K¨¬	¸ÀaÐHÑHÔH�”	ðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Iå�t”yÐ"4Ñ5Ô5ð .Øœ9Ô5Ô<ÔF�Øœ9Ô5Ô<ÔF��àœ9Ô-�Øœ9Ô-�ØŒN×6Ò6°t¸XÑFÔFÐFØŒN×6Ò6°t¸XÑFÔFÐFÐFà#˜ D¤I°HÀ!ÐDÑDÔDˆDŒIå(¨Ô)GÑHÔHˆŒÝ  Ô!?Ô@ˆŒˆˆs   ÃC?Ã?DÄDc                 óÜ   — |                      dd¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      dd¦  «        }|S ©Nr   r   )Ú	transposer?   r3   rK   r&   s     r"   r(   z$WavLMPositionalConvEmbedding.forwardR   se   € Ø%×/Ò/°°1Ñ5Ô5ˆàŸ	š	 -Ñ0Ô0ˆØŸš ]Ñ3Ô3ˆØŸš¨Ñ6Ô6ˆà%×/Ò/°°1Ñ5Ô5ˆØÐr#   r)   r.   s   @r"   r0   r0   0   sM   ø€ € € € € ðAð Að Að Að AðBð ð ð ð ð ð r#   r0   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMFeatureProjectionc                 ó.  •— t          ¦   «                              ¦   «          t          j        |j        d         |j        ¬¦  «        | _        t          j        |j        d         |j        ¦  «        | _	        t          j
        |j        ¦  «        | _        d S )Néÿÿÿÿ©Úeps)r   r   r;   Ú	LayerNormÚconv_dimÚlayer_norm_epsÚ
layer_normÚLinearr=   Ú
projectionÚDropoutÚfeat_proj_dropoutÚdropout©r   rL   r!   s     €r"   r   zWavLMFeatureProjection.__init__^   sn   ø€ Ý‰Œ×ÒÑÔÐÝœ, v¤°rÔ':ÀÔ@UÐVÑVÔVˆŒÝœ) F¤O°BÔ$7¸Ô9KÑLÔLˆŒÝ”z &Ô":Ñ;Ô;ˆŒˆˆr#   c                 óˆ   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }||fS ©N)rY   r[   r^   )r   r'   Únorm_hidden_statess      r"   r(   zWavLMFeatureProjection.forwardd   sC   € à!Ÿ_š_¨]Ñ;Ô;ÐØŸšÐ(:Ñ;Ô;ˆØŸš ]Ñ3Ô3ˆØÐ0Ð0Ð0r#   r)   r.   s   @r"   rQ   rQ   ]   sG   ø€ € € € € ð<ð <ð <ð <ð <ð1ð 1ð 1ð 1ð 1ð 1ð 1r#   rQ   c                   ó”  ‡ — e Zd ZdZ	 	 	 	 ddededeez  d	ed
edefˆ fd„Z	 	 	 	 ddej	        dej	        dz  dej	        dz  dede
ej	        ej	        dz  e
ej	                 dz  f         f
d„Zdej        dej        ej        z  dej        dede
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ç        é@  é   TÚ	embed_dimÚ	num_headsr^   Únum_bucketsÚmax_distanceÚhas_relative_position_biasc                 óà  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        | j        |z  | j        k    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¦  «        | _        |r&t          j        | j        | j        ¦  «        | _        d S d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿r   é   )r   r   rh   ri   r^   Úhead_dimÚ
ValueErrorÚscalingr;   rZ   Úk_projÚv_projÚq_projÚout_projrj   rk   Ú	ParameterÚtorchÚonesÚgru_rel_pos_constÚgru_rel_pos_linearÚ	EmbeddingÚrel_attn_embed)r   rh   ri   r^   rj   rk   rl   r!   s          €r"   r   zWavLMAttention.__init__o   sa  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒå”i 	¨9Ñ5Ô5ˆŒÝ”i 	¨9Ñ5Ô5ˆŒÝ”i 	¨9Ñ5Ô5ˆŒÝœ	 )¨YÑ7Ô7ˆŒà&ˆÔØ(ˆÔå!#¤­e¬j¸¸D¼NÈAÈqÑ.QÔ.QÑ!RÔ!RˆÔÝ"$¤)¨D¬M¸1Ñ"=Ô"=ˆÔà%ð 	QÝ"$¤,¨tÔ/?ÀÄÑ"PÔ"PˆDÔÐÐð	Qð 	Qr#   NFr   r'   Úattention_maskÚposition_biasÚoutput_attentionsÚreturnc                 óF  — |                      ¦   «         \  }}}|€^|                      ||¦  «        }|                     d¦  «                             |ddd¦  «                             || j        z  ||¦  «        }|                     |j        dd…         | j        dfz   ¦  «        }	|	                     dddd¦  «        }	|                      |	¦  «        }
|
                     |	j        dd…         dz   ¦  «         	                    d¦  «        }
t          j        |
¦  «                             dd¬¦  «        \  }}||| j        z  d	z
  z  d
z   }|                     || j        z  dd¦  «        |z  }|                     d||f¦  «        }|                      ||||¦  «        \  }}|||fS )z'Attention layer with relative attentionNr   r   rS   r   r   )r   é   ©r9   ç      ð?g       @)ÚsizeÚcompute_biasÚ	unsqueezeÚrepeatÚviewri   ÚshapeÚpermuterz   Úsumrw   ÚsigmoidÚchunkry   Ú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Ôlð ð ,×0Ò0°Ô1DÀSÀbÀSÔ1IÈTÌ^Ð]_ÐL`Ñ1`ÑaÔaÐØ1×9Ò9¸!¸QÀÀ1ÑEÔEÐð "&×!8Ò!8Ð9LÑ!MÔ!MÐØ!7×!<Ò!<Ð=PÔ=VÐWZÐXZÐWZÔ=[Ð^dÑ=dÑ!eÔ!e×!iÒ!iÐjlÑ!mÔ!mÐõ œÐ'=Ñ>Ô>×DÒDÀQÈBÐDÑOÔO‰ˆ�Ø ¨Ô)?Ñ ?À#Ñ EÑFÈÑLˆð *×.Ò.¨s°T´^Ñ/CÀRÈÑKÔKÈmÑ[ÐØ1×6Ò6¸¸GÀWÐ7MÑNÔNÐà$(×$HÒ$HØ˜>Ð+>Ð@Qñ%
ô %
Ñ!ˆ�\ð ˜L¨-Ð7Ð7r#   r™   c                 ó¦  — |                      dd¦  «        x}x}}|�|                     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        ¬¦  «        \  }}|                      dd¦  «        }|�E|dd…df                              |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)rO   ÚneÚFÚmulti_head_attention_forwardrh   ri   rw   ÚemptyÚcatrt   Úbiasrr   rs   r^   ru   r7   Ú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¼   sx  € ð ,×5Ò5°a¸Ñ;Ô;Ð;ˆÐ;��eØ3AÐ3M˜>×,Ò,¨QÑ/Ô/Ð/ÐSWÐð Ðˆ�Øˆõ %&Ô$BØØØØŒNØŒNÝŒK˜˜ÑÔÝŒI�t”{Ô'¨¬Ô)9¸4¼;Ô;KÐLÑMÔMØØØØŒLØŒMÔ ØŒMÔØŒMØØØØ%)Øœ+Ô,Øœ+Ô,Øœ+Ô,ð+%
ñ %
ô %
Ñ!ˆ�\ð2 "×+Ò+¨A¨qÑ1Ô1ˆàÐ#ð (¨¨¨¨4¨Ô0×=Ò=ØÔ" 2 A 2Ô&¨$¬.Ð):Ñ:¸\Ô=OÐPQÐPRÐ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        ¦  «        }|                      |¦  «        }|                     g d¢¦  «        }|S )N©Údtype)r   r   r   )	rw   ÚarangeÚlongÚ_relative_positions_bucketÚtor|   r7   Údevicer‹   )r   r°   r±   Úcontext_positionÚmemory_positionÚrelative_positionÚrelative_position_bucketÚvaluess           r"   r†   zWavLMAttention.compute_biasó   sµ   € Ý œ<¨½E¼JÐGÑGÔGÈÈÈÈ4ÈÔPÐÝœ, z½¼ÐDÑDÔDÀTÈ1È1È1ÀWÔMˆØ+Ð.>Ñ>ÐØ#'×#BÒ#BÐCTÑ#UÔ#UÐ Ø#;×#>Ò#>¸tÔ?RÔ?YÔ?`Ñ#aÔ#aÐ Ø×$Ò$Ð%=Ñ>Ô>ˆØ—’ 	 	 	Ñ*Ô*ˆØˆr#   Úrelative_positionsc                 ó  — | j         dz  }|dk                         t          j        ¦  «        |z  }t          j        |¦  «        }|dz  }||k     }t          j        |                     ¦   «         |z  ¦  «        }|t          j        | j        |z  ¦  «        z  }|||z
  z  }||z                        t          j        ¦  «        }t          j	        |t          j
        ||dz
  ¦  «        ¦  «        }|t          j        |||¦  «        z  }|S r   )rj   r¸   rw   r¶   ÚabsÚlogÚfloatÚmathrk   ÚminÚ	full_likeÚwhere)r   r¿   rj   Ú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ÑBÔBÀ[ÑPÐÝ"œYÐ'9Ñ:Ô:Ðà 1Ñ$ˆ	Ø%¨	Ò1ˆå&+¤iÐ0B×0HÒ0HÑ0JÔ0JÈYÑ0VÑ&WÔ&WÐ#Ø&AÅDÄHÈTÔM^ÐajÑMjÑDkÔDkÑ&kÐ#Ø&AÀ[ÐS\ÑE\Ñ&]Ð#Ø&/Ð2MÑ&M×%QÒ%QÕRWÔR\Ñ%]Ô%]Ð"Ý%*¤YØ&­¬Ð8RÐT_ÐbcÑTcÑ(dÔ(dñ&
ô &
Ð"ð 	�EœK¨Ð2DÐF`ÑaÔaÑaÐØÐr#   )re   rf   rg   T©NNFr   )r*   r+   r,   Ú__doc__ÚintrÃ   Úboolr   rw   ÚTensorÚtupler(   ÚFloatTensorÚ
LongTensorÚ
BoolTensorr�   r†   r·   r-   r.   s   @r"   rd   rd   l   sæ  ø€ € € € € ØGÐGð  #ØØØ+/ð"Qð "Qàð"Qð ð"Qð ˜‘ð	"Qð
 ð"Qð ð"Qð %)ð"Qð "Qð "Qð "Qð "Qð "QðN /3Ø-1Ø"'Øð'8ð '8à”|ð'8ð œ tÑ+ð'8ð ”| dÑ*ð	'8ð
  ð'8ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð'8ð '8ð '8ð '8ðR5)àÔ(ð5)ð Ô(¨5Ô+;Ñ;ð5)ð #Ô.ð	5)ð
  ð5)ð 
ˆuÔ  %Ô"3Ð3Ô	4ð5)ð 5)ð 5)ð 5)ðn¨ð ¸#ð À%ÔBSð ð ð ð ð ¸UÔ=Nð  ÐSXÔSdð  ð  ð  ð  ð  ð  ð  ð  r#   rd   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        ¦  «        | _        d S ra   )r   r   r;   r\   Úactivation_dropoutÚintermediate_dropoutrZ   r=   Úintermediate_sizeÚintermediate_denseÚ
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnÚoutput_denseÚhidden_dropoutÚoutput_dropoutr_   s     €r"   r   zWavLMFeedForward.__init__  s°   ø€ Ý‰Œ×ÒÑÔÐÝ$&¤J¨vÔ/HÑ$IÔ$IˆÔ!å"$¤)¨FÔ,>ÀÔ@XÑ"YÔ"YˆÔÝ�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$à'-Ô'8ˆDÔ$åœI fÔ&>ÀÔ@RÑSÔSˆÔÝ œj¨Ô)>Ñ?Ô?ˆÔÐÐr#   c                 óØ   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ra   )rÜ   rà   rÚ   rá   rã   r&   s     r"   r(   zWavLMFeedForward.forward   sg   € Ø×/Ò/°Ñ>Ô>ˆØ×0Ò0°Ñ?Ô?ˆØ×1Ò1°-Ñ@Ô@ˆà×)Ò)¨-Ñ8Ô8ˆØ×+Ò+¨MÑ:Ô:ˆØÐr#   r)   r.   s   @r"   r×   r×     sL   ø€ € € € € ð@ð @ð @ð @ð @ðð ð ð ð ð ð r#   r×   c                   ó2   ‡ — e Zd Zd	dedefˆ fd„Zd
d„Zˆ xZS )ÚWavLMEncoderLayerTrL   rl   c                 ó¦  •— t          ¦   «                              ¦   «          t          |j        |j        |j        |j        |j        |¬¦  «        | _        t          j
        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t!          |¦  «        | _        t          j        |j        |j        ¬¦  «        | _        d S ©N)rh   ri   r^   rj   rk   rl   rT   ©r   r   rd   r=   Únum_attention_headsÚattention_dropoutrj   Úmax_bucket_distanceÚ	attentionr;   r\   râ   r^   rV   rX   rY   r×   Úfeed_forwardÚfinal_layer_norm©r   rL   rl   r!   s      €r"   r   zWavLMEncoderLayer.__init__+  óµ   ø€ Ý‰Œ×ÒÑÔÐÝ'ØÔ(ØÔ0ØÔ,ØÔ*ØÔ3Ø'Að
ñ 
ô 
ˆŒõ ”z &Ô"7Ñ8Ô8ˆŒÝœ, vÔ'9¸vÔ?TÐUÑUÔUˆŒÝ,¨VÑ4Ô4ˆÔÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÐÐr#   NFr   c                 ó  — |}|                       |||||¬¦  «        \  }}}|                      |¦  «        }||z   }|                      |¦  «        }||                      |¦  «        z   }|                      |¦  «        }||f}|r||fz  }|S )N©r}   r~   r   r�   )rí   r^   rY   rî   rï   )	r   r'   r}   r~   r   r�   Úattn_residualr›   Úoutputss	            r"   r(   zWavLMEncoderLayer.forward:  s²   € Ø%ˆØ59·^²^ØØ)Ø'Ø/Øð 6Dñ 6
ô 6
Ñ2ˆ�| ]ð Ÿš ]Ñ3Ô3ˆØ%¨Ñ5ˆàŸš¨Ñ6Ô6ˆà%¨×(9Ò(9¸-Ñ(HÔ(HÑHˆØ×-Ò-¨mÑ<Ô<ˆà  -Ð0ˆàð 	'Ø˜�Ñ&ˆGàˆr#   ©TrÍ   ©r*   r+   r,   r   rÐ   r   r(   r-   r.   s   @r"   ræ   ræ   *  sm   ø€ € € € € ð\ð \˜{ð \Èð \ð \ð \ð \ð \ð \ðð ð ð ð ð ð ð r#   ræ   c                   ó2   ‡ — e Zd Zddedefˆ fd„Zd	d„Zˆ xZS )
Ú WavLMEncoderLayerStableLayerNormTrL   rl   c                 ó¦  •— t          ¦   «                              ¦   «          t          |j        |j        |j        |j        |j        |¬¦  «        | _        t          j
        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t!          |¦  «        | _        t          j        |j        |j        ¬¦  «        | _        d S rè   ré   rð   s      €r"   r   z)WavLMEncoderLayerStableLayerNorm.__init__T  rñ   r#   NFc                 ó  — |}|                       |¦  «        }|                      ||||¬¦  «        \  }}}|                      |¦  «        }||z   }||                      |                      |¦  «        ¦  «        z   }||f}|r||fz  }|S )N)r}   r~   r   )rY   rí   r^   rî   rï   )r   r'   r}   r~   r   rô   r›   rõ   s           r"   r(   z(WavLMEncoderLayerStableLayerNorm.forwardc  s«   € Ø%ˆØŸš¨Ñ6Ô6ˆØ59·^²^ØØ)Ø'Ø/ð	 6Dñ 6
ô 6
Ñ2ˆ�| ]ð Ÿš ]Ñ3Ô3ˆØ%¨Ñ5ˆØ%¨×(9Ò(9¸$×:OÒ:OÐP]Ñ:^Ô:^Ñ(_Ô(_Ñ_ˆà  -Ð0ˆàð 	'Ø˜�Ñ&ˆGàˆr#   rö   )NNFr÷   r.   s   @r"   rù   rù   S  sm   ø€ € € € € ð\ð \˜{ð \Èð \ð \ð \ð \ð \ð \ðð ð ð ð ð ð ð 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        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )NrT   c                 ó:   •— g | ]}t          ‰|d k    ¬¦  «        ‘ŒS ©r   )rl   )ræ   ©Ú.0ÚirL   s     €r"   ú
<listcomp>z)WavLMEncoder.__init__.<locals>.<listcomp>€  s,   ø€ ÐuÐuÐuÐPQÕ˜vÀ1ÈÂ6ÐKÑKÔKÐuÐuÐur#   F©r   r   rL   r0   Úpos_conv_embedr;   rV   r=   rX   rY   r\   râ   r^   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersÚgradient_checkpointingr_   s    `€r"   r   zWavLMEncoder.__init__y  s¨   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ:¸6ÑBÔBˆÔÝœ, vÔ'9¸vÔ?TÐUÑUÔUˆŒÝ”z &Ô"7Ñ8Ô8ˆŒÝ”mØuÐuÐuÐuÕUZÐ[aÔ[sÑUtÔUtÐuÑuÔuñ
ô 
ˆŒð ',ˆÔ#Ð#Ð#r#   NFTc                 óÖ  — |rdnd }|rdnd }|�;|                      d¦  «                             dd|j        d         ¦  «        }d|| <   |                      |¦  «        }	||	z   }|                      |¦  «        }|                      |¦  «        }t          ¦   «         pt          | ¦  «        }
d }t          | j	        ¦  «        D ]q\  }}|r||fz   }t          j        g ¦  «        }| j        o|dk    o|| j        j        k     }|r|
r ||||||¬¦  «        }|d d…         \  }}|rd}|r||d         fz   }Œr|r||fz   }|st          d„ |||fD ¦   «         ¦  «        S t!          |||¬	¦  «        S )
N© rS   r   r   r   ró   ©NNNc              3   ó   K  — | ]}|®|V — Œ	d S ra   r  ©r  Úvs     r"   ú	<genexpr>z'WavLMEncoder.forward.<locals>.<genexpr>º  ó(   è è € ÐmÐm˜qÐ_`Ð_l˜Ð_lÐ_lÐ_lÐ_lÐmÐmr#   ©Úlast_hidden_stater'   Ú
attentions)r‡   rˆ   rŠ   r  rY   r^   r   r   Ú	enumerater
  rw   Úrandr§   rL   Ú	layerdroprÒ   r
   ©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˜B¸DÐØ$5Ð?˜b˜b¸4ÐàÐ%à$2×$<Ò$<¸RÑ$@Ô$@×$GÒ$GÈÈ1ÈmÔNaÐbcÔNdÑ$eÔ$eÐ!Ø45ˆMÐ0Ð0Ñ1à"×1Ò1°-Ñ@Ô@ÐØ%Ð(;Ñ;ˆØŸš¨Ñ6Ô6ˆØŸš ]Ñ3Ô3ˆå0Ñ2Ô2ÐRÕ6LÈTÑ6RÔ6RˆØˆå! $¤+Ñ.Ô.ð 	Pð 	P‰HˆAˆuØ#ð IØ$5¸Ð8HÑ$HÐ!õ #(¤*¨R¡.¤.Ðà!œ]Ðf¨q°1ªuÐfÐ:MÐPTÔP[ÔPeÒ:eˆNØ!ð 
A [ð 
Aà % Ø!Ø#1Ø"/Ø&7Øð!ñ !ô !�ð 0=¸R¸a¸RÔ/@Ñ,�˜}àð 3Ø 2�à ð PØ&9¸]È1Ô=MÐ<OÑ&OÐ#øàð 	EØ 1°]Ð4DÑ DÐàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmÝØ+Ø+Ø*ð
ñ 
ô 
ð 	
r#   ©NFFTr)   r.   s   @r"   rý   rý   x  sZ   ø€ € € € € ð	,ð 	,ð 	,ð 	,ð 	,ð ØØ"Øð;
ð ;
ð ;
ð ;
ð ;
ð ;
ð ;
ð ;
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        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )NrT   c                 ó:   •— g | ]}t          ‰|d k    ¬¦  «        ‘ŒS r   )rù   r  s     €r"   r  z8WavLMEncoderStableLayerNorm.__init__.<locals>.<listcomp>Ê  s=   ø€ ð ð ð àõ 1°ÐUVÐZ[ÒU[Ð]Ñ]Ô]ðð ð r#   Fr  r_   s    `€r"   r   z$WavLMEncoderStableLayerNorm.__init__Ã  sµ   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ:¸6ÑBÔBˆÔÝœ, vÔ'9¸vÔ?TÐUÑUÔUˆŒÝ”z &Ô"7Ñ8Ô8ˆŒÝ”mðð ð ð å˜vÔ7Ñ8Ô8ðñ ô ñ
ô 
ˆŒð ',ˆÔ#Ð#Ð#r#   NFTc                 óÔ  — |rdnd }|rdnd }|�;|                      d¦  «                             dd|j        d         ¦  «        }d|| <   |                      |¦  «        }	||	z   }|                      |¦  «        }t          ¦   «         pt          | ¦  «        }
d }t          | j        ¦  «        D ]p\  }}|r||fz   }t          j
        g ¦  «        }| j        o|dk    o|| j        j        k     }|r|
r |||||¬¦  «        }|d d…         \  }}|rd}|r||d         fz   }Œq|                      |¦  «        }|r||fz   }|st          d„ |||fD ¦   «         ¦  «        S t!          |||¬	¦  «        S )
Nr  rS   r   r   r   )r}   r   r~   r  c              3   ó   K  — | ]}|®|V — Œ	d S ra   r  r  s     r"   r  z6WavLMEncoderStableLayerNorm.forward.<locals>.<genexpr>  r  r#   r  )r‡   rˆ   rŠ   r  r^   r   r   r  r
  rw   r  r§   rL   r  rY   rÒ   r
   r  s                    r"   r(   z#WavLMEncoderStableLayerNorm.forwardÑ  s  € ð #7Ð@˜B˜B¸DÐØ$5Ð?˜b˜b¸4ÐàÐ%à$2×$<Ò$<¸RÑ$@Ô$@×$GÒ$GÈÈ1ÈmÔNaÐbcÔNdÑ$eÔ$eÐ!Ø45ˆMÐ0Ð0Ñ1à"×1Ò1°-Ñ@Ô@ÐØ%Ð(;Ñ;ˆØŸš ]Ñ3Ô3ˆå0Ñ2Ô2ÐRÕ6LÈTÑ6RÔ6RˆØˆå! $¤+Ñ.Ô.ð 	Pð 	P‰HˆAˆuØ#ð IØ$5¸Ð8HÑ$HÐ!õ #(¤*¨R¡.¤.Ðà!œ]Ðf¨q°1ªuÐfÐ:MÐPTÔP[ÔPeÒ:eˆNØ!ð 	A [ð 	Að !& Ø!Ø#1Ø&7Ø"/ð	!ñ !ô !�ð 0=¸R¸a¸RÔ/@Ñ,�˜}àð 3Ø 2�à ð PØ&9¸]È1Ô=MÐ<OÑ&OÐ#øàŸš¨Ñ6Ô6ˆàð 	EØ 1°]Ð4DÑ DÐàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmÝØ+Ð;LÐYlð
ñ 
ô 
ð 	
r#   r&  r)   r.   s   @r"   r(  r(  Â  sZ   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð" ØØ"Øð9
ð 9
ð 9
ð 9
ð 9
ð 9
ð 9
ð 9
r#   r(  c                   ó>   ‡ — 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://huggingface.co/papers/1611.01144) for more information.
    c                 óÞ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | j        z  dk    r t          d|j        › d| j        › d�¦  «        ‚t          j	        t          j        d| j        | j        z  |j        | j        z  ¦  «        ¦  «        | _        t          j        |j        d         | j        | j        z  ¦  «        | _        d| _        d S )Nr   z`config.codevector_dim z5 must be divisible by `config.num_codevector_groups` z for concatenation.r   rS   r   )r   r   Únum_codevector_groupsÚ
num_groupsÚnum_codevectors_per_groupÚnum_varsÚcodevector_dimrp   r;   rv   rw   rÓ   ÚcodevectorsrZ   rW   Úweight_projÚtemperaturer_   s     €r"   r   z#WavLMGumbelVectorQuantizer.__init__  sï   ø€ Ý‰Œ×ÒÑÔÐØ Ô6ˆŒØÔ8ˆŒàÔ  4¤?Ñ2°aÒ7Ð7Ýð%¨&Ô*?ð %ð %Ø6:´oð%ð %ð %ñô ð õ œ<ÝÔ˜a ¤°4´=Ñ!@À&ÔBWÐ[_Ô[jÑBjÑkÔkñ
ô 
ˆÔõ œ9 V¤_°RÔ%8¸$¼/ÈDÌMÑ:YÑZÔZˆÔð ˆÔÐÐr#   c                 óÎ   — |                       d¬¦  «        }t          j        t          j        t          j        ||¦  «        d¬¦  «         ¦  «                             ¦   «         }|S )Nr   rƒ   rS   )Úmeanrw   ÚexprŒ   Úxlogy)ÚprobsÚmarginal_probsÚ
perplexitys      r"   Ú_compute_perplexityz.WavLMGumbelVectorQuantizer._compute_perplexity(  sU   € àŸš¨˜Ñ*Ô*ˆÝ”Y¥¤	­%¬+°nÀnÑ*UÔ*UÐ[]Ð ^Ñ ^Ô ^Ð^Ñ_Ô_×cÒcÑeÔeˆ
ØÐr#   c                 óú  — |j         \  }}}|                      |¦  «        }|                     ||z  | j        z  d¦  «        }| j        r©t
          j                             |                     ¦   «         | j	        d¬¦  «        }| 
                    |¦  «        }t          j        |                     ||z  | j        d¦  «                             ¦   «         d¬¦  «        }|                      |¦  «        }n‚|                     d¬¦  «        } |j        |j         Ž                      d|                     dd¦  «        d¦  «        }|                     ||z  | j        d¦  «        }|                      |¦  «        }|                     ||z  d¦  «        }|                     d¦  «        | j        z  }	|	                     ||z  | j        | j        d¦  «        }
|
                     d¦  «                             ||d¦  «        }
|
|fS )NrS   T)ÚtauÚhardrƒ   r   r„   éþÿÿÿ)rŠ   r6  r‰   r1  r§   r;   Ú
functionalÚgumbel_softmaxrÃ   r7  Útype_asrw   Ú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.forward.  s  € Ø3@Ô3FÑ0ˆ
�O [ð ×(Ò(¨Ñ7Ô7ˆØ%×*Ò*¨:¸Ñ+GÈ$Ì/Ñ+YÐ[]Ñ^Ô^ˆàŒ=ð 	Då!œ}×;Ò;¸M×<OÒ<OÑ<QÔ<QÐW[ÔWgÐnrÐ;ÑsÔsÐØ/×7Ò7¸ÑFÔFÐõ $)¤=Ø×"Ò" :°Ñ#?ÀÄÐRTÑUÔU×[Ò[Ñ]Ô]Ðceð$ñ $ô $Ð ð ×1Ò1Ð2FÑGÔGˆJˆJð +×1Ò1°bÐ1Ñ9Ô9ˆNØ6˜}Ô6¸Ô8KÐL×UÒUØ�N×'Ò'¨¨AÑ.Ô.°ñ ô  Ðð  0×4Ò4°ZÀ/Ñ5QÐSWÔSbÐdfÑgÔgÐà×1Ò1Ð2BÑCÔCˆJà+×0Ò0°¸oÑ1MÈrÑRÔRÐà 0× :Ò :¸2Ñ >Ô >ÀÔAQÑ QÐØ+×0Ò0°¸oÑ1MÈtÌÐ`dÔ`mÐoqÑrÔrˆØ!—o’o bÑ)Ô)×.Ò.¨z¸?ÈBÑOÔOˆà˜JÐ&Ð&r#   )	r*   r+   r,   rÎ   r   Ústaticmethodr?  r(   r-   r.   s   @r"   r.  r.    sl   ø€ € € € € ðð ð
ð ð ð ð ð* ðð ñ „\ðð
"'ð "'ð "'ð "'ð "'ð "'ð "'r#   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d	ej        ez  d
edz  fd„Z	 ddedej        fd„Zˆ xZS )ÚWavLMPreTrainedModelrL   ÚwavlmÚinput_valuesÚaudioTFc           
      óL  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rZt	          j        |j        j        dd¬¦  «         t	          j        |j        j	        ¦  «         t	          j
        |j        ¦  «         dS t          |t          ¦  «        rwt	          j        |j        j        ddt          j        d|j        j        d         |j        j        z  z  ¦  «        z  ¬¦  «         t	          j        |j        j	        d¦  «         dS t          |t&          ¦  «        rgt          j        d|j        j        z  ¦  «        }t	          j
        |j        j        | |¬¦  «         t	          j
        |j        j	        | |¬¦  «         dS t          |t,          j        ¦  «        rnt	          j        |j        ¦  «         |j	        �Pt          j        |j        |j        |j        d         z  z  ¦  «        }t	          j
        |j	        | |¬¦  «         dS dS dS )zInitialize the weightsre   r   )r9  Ústdr   r   )ÚaÚbN)r   Ú_init_weightsrÝ   r.  ÚinitÚnormal_r6  r7   Úzeros_r¦   Úuniform_r5  r0   r?   rÄ   Úsqrtr2   Úin_channelsÚ	constant_rQ   r[   Úin_featuresr;   r<   Úkaiming_normal_r4   )r   ÚmoduleÚkr!   s      €r"   r[  z"WavLMPreTrainedModel._init_weights^  s÷  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%å�fÕ8Ñ9Ô9ð 	6ÝŒL˜Ô+Ô2¸À!ÐDÑDÔDÐDÝŒK˜Ô*Ô/Ñ0Ô0Ð0ÝŒM˜&Ô,Ñ-Ô-Ð-Ð-Ð-Ý˜Õ <Ñ=Ô=ð 	6ÝŒLØ”Ô"ØØ�œ	 ! v¤{Ô'>¸qÔ'AÀFÄKÔD[Ñ'[Ñ"\Ñ]Ô]Ñ]ðñ ô ð õ
 ŒN˜6œ;Ô+¨QÑ/Ô/Ð/Ð/Ð/Ý˜Õ 6Ñ7Ô7ð 		6Ý”	˜!˜fÔ/Ô;Ñ;Ñ<Ô<ˆAÝŒM˜&Ô+Ô2°q°b¸AÐ>Ñ>Ô>Ð>ÝŒM˜&Ô+Ô0°Q°B¸!Ð<Ñ<Ô<Ð<Ð<Ð<Ý˜¥¤	Ñ*Ô*ð 	6ÝÔ  ¤Ñ/Ô/Ð/àŒ{Ð&Ý”I˜fœm¨vÔ/AÀFÔDVÐWXÔDYÑ/YÑZÑ[Ô[�Ý”˜fœk¨a¨R°1Ð5Ñ5Ô5Ð5Ð5Ð5ð	6ð 	6ð 'Ð&r#   NÚinput_lengthsÚadd_adapterc                 ó  — |€| j         j        n|}d„ }t          | j         j        | j         j        ¦  «        D ]\  }} ||||¦  «        }Œ|r3t          | j         j        ¦  «        D ]} ||d| j         j        ¦  «        }Œ|S )zH
        Computes the output length of the convolutional layers
        Nc                 ó<   — t          j        | |z
  |d¬¦  «        dz   S )NÚfloor)Úrounding_moder   )rw   Údiv©Úinput_lengthr2   Ústrides      r"   Ú_conv_out_lengthzOWavLMPreTrainedModel._get_feat_extract_output_lengths.<locals>._conv_out_length€  s&   € õ ”9˜\¨KÑ7¸ÈwÐWÑWÔWÐZ[Ñ[Ð[r#   r   )rL   rh  ÚzipÚconv_kernelÚconv_strider  Únum_adapter_layersÚadapter_stride)r   rg  rh  rq  r2   rp  r“   s          r"   Ú _get_feat_extract_output_lengthsz5WavLMPreTrainedModel._get_feat_extract_output_lengthsy  s´   € ð
 2=Ð1D�d”kÔ-Ð-È+ˆð	\ð 	\ð 	\õ
 $' t¤{Ô'>ÀÄÔ@WÑ#XÔ#Xð 	Qð 	QÑˆK˜Ø,Ð,¨]¸KÈÑPÔPˆMˆMàð 	_Ý˜4œ;Ô9Ñ:Ô:ð _ð _�Ø 0Ð 0°ÀÀ4Ä;ÔC]Ñ ^Ô ^��àÐr#   Úfeature_vector_lengthr}   c                 ó  — |                      d¬¦  «        d d …df         }|                      ||¬¦  «        }|                     t          j        ¦  «        }|j        d         }t          j        ||f|j        |j        ¬¦  «        }d|t          j	        |j        d         |j        ¬¦  «        |dz
  f<   | 
                    dg¦  «                              d¦  «         
                    dg¦  «                             ¦   «         }|S )NrS   rƒ   ©rh  r   )r´   r¹   r   )r¹   )Úcumsumrw  r¸   rw   r¶   rŠ   Úzerosr´   r¹   rµ   ÚfliprÐ   )r   rx  r}   rh  Únon_padded_lengthsÚoutput_lengthsrK  s          r"   Ú"_get_feature_vector_attention_maskz7WavLMPreTrainedModel._get_feature_vector_attention_maskŽ  s  € ð
 ,×2Ò2°rÐ2Ñ:Ô:¸1¸1¸1¸b¸5ÔAÐà×>Ò>Ð?QÐ_jÐ>ÑkÔkˆØ'×*Ò*­5¬:Ñ6Ô6ˆà#Ô)¨!Ô,ˆ
åœØÐ.Ð/°~Ô7KÐTbÔTið
ñ 
ô 
ˆð uvˆ�œ ^Ô%9¸!Ô%<À^ÔEZÐ[Ñ[Ô[Ð]kÐnoÑ]oÐpÑqØ'×,Ò,¨b¨TÑ2Ô2×9Ò9¸"Ñ=Ô=×BÒBÀBÀ4ÑHÔH×MÒMÑOÔOˆØÐr#   ra   )r*   r+   r,   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnrw   Úno_gradr[  rÔ   rÏ   rÐ   rw  r€  r-   r.   s   @r"   rS  rS  S  sê   ø€ € € € € € àÐÐÑØÐØ$€OØÐØ&*Ð#Ø ÐØ€NØÐà€U„]�_„_ð6ð 6ð 6ð 6ñ „_ð6ð4ð ¸eÔ>NÐQTÑ>Tð ÐcgÐjnÑcnð ð ð ð ð, Y]ðð Ø%(ðØ:?Ô:Jðð ð ð ð ð ð ð r#   rS  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚWavLMNoLayerNormConvLayerr   c                 óZ  •— t          ¦   «                              ¦   «          |dk    r|j        |dz
           nd| _        |j        |         | _        t          j        | j        | j        |j        |         |j        |         |j	        ¬¦  «        | _
        t          |j                 | _        d S )Nr   r   ©r2   rp  r¦   )r   r   rW   Úin_conv_dimÚout_conv_dimr;   r<   rs  rt  Ú	conv_biasr?   r   rJ   rK   ©r   rL   Úlayer_idr!   s      €r"   r   z"WavLMNoLayerNormConvLayer.__init__¤  s�   ø€ Ý‰Œ×ÒÑÔÐØ<DÀqºL¸L˜6œ?¨8°a©<Ô8Ð8ÈaˆÔØ"œO¨HÔ5ˆÔå”IØÔØÔØÔ*¨8Ô4ØÔ% hÔ/ØÔ!ð
ñ 
ô 
ˆŒ	õ ! Ô!?Ô@ˆŒˆˆr#   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S ra   )r?   rK   r&   s     r"   r(   z!WavLMNoLayerNormConvLayer.forward²  s*   € ØŸ	š	 -Ñ0Ô0ˆØŸš¨Ñ6Ô6ˆØÐr#   ©r   r)   r.   s   @r"   r‹  r‹  £  sR   ø€ € € € € ðAð Að Að Að Að Aðð ð ð ð ð ð r#   r‹  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚWavLMLayerNormConvLayerr   c                 óš  •— t          ¦   «                              ¦   «          |dk    r|j        |dz
           nd| _        |j        |         | _        t          j        | j        | j        |j        |         |j        |         |j	        ¬¦  «        | _
        t          j        | j        d¬¦  «        | _        t          |j                 | _        d S )Nr   r   r�  T)Úelementwise_affine)r   r   rW   rŽ  r�  r;   r<   rs  rt  r�  r?   rV   rY   r   rJ   rK   r‘  s      €r"   r   z WavLMLayerNormConvLayer.__init__¹  s¶   ø€ Ý‰Œ×ÒÑÔÐØ<DÀqºL¸L˜6œ?¨8°a©<Ô8Ð8ÈaˆÔØ"œO¨HÔ5ˆÔå”IØÔØÔØÔ*¨8Ô4ØÔ% hÔ/ØÔ!ð
ñ 
ô 
ˆŒ	õ œ, tÔ'8ÈTÐRÑRÔRˆŒÝ  Ô!?Ô@ˆŒˆˆr#   c                 óÜ   — |                       |¦  «        }|                     dd¦  «        }|                      |¦  «        }|                     dd¦  «        }|                      |¦  «        }|S )NrC  rS   )r?   rO   rY   rK   r&   s     r"   r(   zWavLMLayerNormConvLayer.forwardÈ  se   € ØŸ	š	 -Ñ0Ô0ˆà%×/Ò/°°BÑ7Ô7ˆØŸš¨Ñ6Ô6ˆØ%×/Ò/°°BÑ7Ô7ˆàŸš¨Ñ6Ô6ˆØÐr#   r”  r)   r.   s   @r"   r–  r–  ¸  sR   ø€ € € € € ðAð Að Að Að Að Aðð ð ð ð ð ð r#   r–  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚWavLMGroupNormConvLayerr   c                 ó¦  •— t          ¦   «                              ¦   «          |dk    r|j        |dz
           nd| _        |j        |         | _        t          j        | j        | j        |j        |         |j        |         |j	        ¬¦  «        | _
        t          |j                 | _        t          j        | j        | j        d¬¦  «        | _        d S )Nr   r   r�  T)r1  Únum_channelsÚaffine)r   r   rW   rŽ  r�  r;   r<   rs  rt  r�  r?   r   rJ   rK   Ú	GroupNormrY   r‘  s      €r"   r   z WavLMGroupNormConvLayer.__init__Ô  s½   ø€ Ý‰Œ×ÒÑÔÐØ<DÀqºL¸L˜6œ?¨8°a©<Ô8Ð8ÈaˆÔØ"œO¨HÔ5ˆÔå”IØÔØÔØÔ*¨8Ô4ØÔ% hÔ/ØÔ!ð
ñ 
ô 
ˆŒ	õ ! Ô!?Ô@ˆŒåœ,°$Ô2CÐRVÔRcÐlpÐqÑqÔqˆŒˆˆr#   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ra   )r?   rY   rK   r&   s     r"   r(   zWavLMGroupNormConvLayer.forwardä  s;   € ØŸ	š	 -Ñ0Ô0ˆØŸš¨Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐr#   r”  r)   r.   s   @r"   r›  r›  Ó  sR   ø€ € € € € ðrð rð rð rð rð rð ð ð ð ð ð ð r#   r›  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚWavLMFeatureEncoderz.Construct the features from raw audio waveformc                 ó¤  •‡— t          ¦   «                              ¦   «          ‰j        dk    r7t          ‰d¬¦  «        gˆfd„t	          ‰j        dz
  ¦  «        D ¦   «         z   }nD‰j        dk    r!ˆfd„t	          ‰j        ¦  «        D ¦   «         }nt          d‰j        › d	�¦  «        ‚t          j        |¦  «        | _	        d
| _
        d| _        d S )NÚgroupr   ©r’  c                 ó8   •— g | ]}t          ‰|d z   ¬¦  «        ‘ŒS )r   r¥  )r‹  r  s     €r"   r  z0WavLMFeatureEncoder.__init__.<locals>.<listcomp>ò  s>   ø€ ð Kð Kð KØFGÕ)¨&¸1¸q¹5ÐAÑAÔAðKð Kð Kr#   r   r"  c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS )r¥  )r–  r  s     €r"   r  z0WavLMFeatureEncoder.__init__.<locals>.<listcomp>ö  s'   ø€ ÐvÐvÐvÈ1Õ2°6ÀAÐFÑFÔFÐvÐvÐvr#   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_layersrp   r;   r  Úconv_layersr  Ú_requires_grad)r   rL   rª  r!   s    ` €r"   r   zWavLMFeatureEncoder.__init__î  s  øø€ Ý‰Œ×ÒÑÔÐàÔ# wÒ.Ð.Ý2°6ÀAÐFÑFÔFÐGð Kð Kð Kð KÝKPÐQWÔQoÐrsÑQsÑKtÔKtðKñ Kô Kñ ˆKˆKð Ô%¨Ò0Ð0ØvÐvÐvÐvÕPUÐV\ÔVtÑPuÔPuÐvÑvÔvˆKˆKåØt°Ô1IÐtÐtÐtñô ð õ œ=¨Ñ5Ô5ˆÔØ&+ˆÔ#Ø"ˆÔÐÐr#   c                 óP   — |                       ¦   «         D ]	}d|_        Œ
d| _        d S )NF)Ú
parametersÚrequires_gradr«  ©r   Úparams     r"   Ú_freeze_parametersz&WavLMFeatureEncoder._freeze_parametersÿ  s4   € Ø—_’_Ñ&Ô&ð 	(ð 	(ˆEØ"'ˆEÔÐØ#ˆÔÐÐr#   c                 ór   — |d d …d f         }| j         r| j        rd|_        | j        D ]} ||¦  «        }Œ|S )NT)r«  r§   r®  rª  )r   rU  r'   Ú
conv_layers       r"   r(   zWavLMFeatureEncoder.forward  s[   € Ø$ Q Q Q¨ WÔ-ˆð Ôð 	/ 4¤=ð 	/Ø*.ˆMÔ'àÔ*ð 	6ð 	6ˆJØ&˜J }Ñ5Ô5ˆMˆMàÐr#   )r*   r+   r,   rÎ   r   r±  r(   r-   r.   s   @r"   r¢  r¢  ë  s\   ø€ € € € € Ø8Ð8ð#ð #ð #ð #ð #ð"$ð $ð $ð

ð 
ð 
ð 
ð 
ð 
ð 
r#   r¢  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMAdapterLayerc                 ó²   •— t          ¦   «                              ¦   «          t          j        |j        d|j        z  |j        |j        d¬¦  «        | _        d S )Nr   r   )rp  r3   )r   r   r;   r<   Úoutput_hidden_sizeÚadapter_kernel_sizerv  r?   r_   s     €r"   r   zWavLMAdapterLayer.__init__  sU   ø€ Ý‰Œ×ÒÑÔÐÝ”IØÔ%Ø�Ô)Ñ)ØÔ&ØÔ(Øð
ñ 
ô 
ˆŒ	ˆ	ˆ	r#   c                 ór   — |                       |¦  «        }t          j                             |d¬¦  «        }|S )Nr   rƒ   )r?   r;   rD  Úglur&   s     r"   r(   zWavLMAdapterLayer.forward  s3   € ØŸ	š	 -Ñ0Ô0ˆÝœ×)Ò)¨-¸QÐ)Ñ?Ô?ˆàÐr#   r)   r.   s   @r"   rµ  rµ    sG   ø€ € € € € ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð r#   rµ  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚWavLMAdapterc                 ó’  •‡— t          ¦   «                              ¦   «          ‰j        ‰j        k    rCt	          j        ‰j        ‰j        ¦  «        | _        t	          j        ‰j        ¦  «        | _        nd x| _        | _        t	          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        ‰j        | _        d S )Nc              3   ó6   •K  — | ]}t          ‰¦  «        V — Œd S ra   )rµ  )r  r“   rL   s     €r"   r  z(WavLMAdapter.__init__.<locals>.<genexpr>.  s,   øè è € Ð#hÐ#hÀ!Õ$5°fÑ$=Ô$=Ð#hÐ#hÐ#hÐ#hÐ#hÐ#hr#   )r   r   r·  r=   r;   rZ   ÚprojrV   Úproj_layer_normr  r  ru  r
  r  r_   s    `€r"   r   zWavLMAdapter.__init__$  s¬   øø€ Ý‰Œ×ÒÑÔÐð Ô$¨Ô(:Ò:Ð:Ýœ	 &Ô"4°fÔ6OÑPÔPˆDŒIÝ#%¤<°Ô0IÑ#JÔ#JˆDÔ Ð à/3Ð3ˆDŒI˜Ô,å”mÐ#hÐ#hÐ#hÐ#hÅuÈVÔMfÑGgÔGgÐ#hÑ#hÔ#hÑhÔhˆŒØÔ)ˆŒˆˆr#   c                 óX  — | j         �1| j        �*|                       |¦  «        }|                      |¦  «        }|                     dd¦  «        }| j        D ]=}t          j                             ¦   «         }| j        r|| j        k    r ||¦  «        }Œ>|                     dd¦  «        }|S rN   )r¿  rÀ  rO   r
  ÚnpÚrandomr§   r  )r   r'   r"  Úlayerdrop_probs       r"   r(   zWavLMAdapter.forward1  s°   € àŒ9Ð  TÔ%9Ð%EØ ŸIšI mÑ4Ô4ˆMØ ×0Ò0°Ñ?Ô?ˆMà%×/Ò/°°1Ñ5Ô5ˆà”[ð 	5ð 	5ˆEÝœY×-Ò-Ñ/Ô/ˆNØ”=ð 5 ^°d´nÒ%DÐ%DØ %  mÑ 4Ô 4�øà%×/Ò/°°1Ñ5Ô5ˆØÐr#   r)   r.   s   @r"   r¼  r¼  #  sG   ø€ € € € € ð*ð *ð *ð *ð *ðð ð ð ð ð ð r#   r¼  rŠ   Ú	mask_probÚmask_lengthr}   Ú	min_masksr€   c                 ó@  ‡‡‡‡‡— | \  }Š‰dk     rt          d¦  «        ‚‰‰k    rt          d‰› d‰› d�¦  «        ‚t          j                             d¦  «                             ¦   «         Šˆˆˆˆˆfd„}|�9|                     ¦   «                              d¦  «                             ¦   «         nˆfd	„t          |¦  «        D ¦   «         }t          j	        |‰ft          ¬
¦  «        }g }	 |‰¦  «        }
|
dk    r|S |D ]·} ||¦  «        }t          j                             t          j        |‰dz
  z
  ¦  «        |d¬¦  «        }t          |¦  «        dk    r‰dz
  }n|d         }t          j        |t          j        |
|z
  t          j        ¬
¦  «        |z  g¦  «        }|	                     |¦  «         Œ¸t          j        |	¦  «        }	t          j        |	dd…dd…df         ||
‰f¦  «        }	|	                     ||
‰z  ¦  «        }	t          j        ‰¦  «        dddd…f         }t          j        |||
‰f¦  «                             ||
‰z  ¦  «        }|	|z   }	|	                     ¦   «         ‰dz
  k    r‰dz
  |	|	‰dz
  k    <   t          j        ||	dd¦  «         |S )an  
    Computes random mask spans for a given shape. Used to implement [SpecAugment: A Simple Data Augmentation Method for
    ASR](https://huggingface.co/papers/1904.08779). Note that this method is not optimized to run on TPU and should be run on
    CPU as part of the preprocessing during training.

    Args:
        shape: The shape for which to compute masks. This should be of a tuple of size 2 where
               the first element is the batch size and the second element is the length of the axis to span.
        mask_prob:  The percentage of the whole axis (between 0 and 1) which will be masked. The number of
                    independently generated mask spans of length `mask_length` is computed by
                    `mask_prob*shape[1]/mask_length`. Note that due to overlaps, `mask_prob` is an upper bound and the
                    actual percentage will be smaller.
        mask_length: size of the mask
        min_masks: minimum number of masked spans
        attention_mask: A (right-padded) attention mask which independently shortens the feature axis of
                        each batch dimension.
    r   z&`mask_length` has to be bigger than 0.zO`mask_length` has to be smaller than `sequence_length`, but got `mask_length`: z and `sequence_length`: ú`c                 ó¸   •— t          ‰| z  ‰z  ‰z   ¦  «        }t          |‰¦  «        }|‰z  ‰k    r‰‰z  }| ‰dz
  z
  |k     rt          | ‰dz
  z
  d¦  «        }|S )z;Given input length, compute how many spans should be maskedr   r   )rÏ   Úmax)ro  Únum_masked_spanÚepsilonrÆ  rÅ  rÇ  rL  s     €€€€€r"   Úcompute_num_masked_spanz6_compute_mask_indices.<locals>.compute_num_masked_spanh  s~   ø€ å˜i¨,Ñ6¸ÑDÀwÑNÑOÔOˆÝ˜o¨yÑ9Ô9ˆð ˜[Ñ(¨?Ò:Ð:Ø-°Ñ<ˆOð ˜;¨™?Ñ+¨oÒ=Ð=Ý! ,°+À±/Ñ"BÀAÑFÔFˆOàÐr#   NrS   c                 ó   •— g | ]}‰‘ŒS r  r  )r  r“   rL  s     €r"   r  z)_compute_mask_indices.<locals>.<listcomp>{  s   ø€ Ð9Ð9Ð9 !ˆoÐ9Ð9Ð9r#   r³   r   F)Úreplace)rp   rÂ  rÃ  r  ÚitemÚdetachrŒ   Útolistr  r|  rÐ   Úchoicerµ   ÚlenÚconcatenaterx   Úint32ÚappendÚarrayr¨   ÚreshaperË  Úput_along_axis)rŠ   rÅ  rÆ  r}   rÇ  rK  rÎ  rg  Úspec_aug_maskÚspec_aug_mask_idxsÚmax_num_masked_spanro  rÌ  Úspec_aug_mask_idxÚdummy_mask_idxÚoffsetsrÍ  rL  s    `` `           @@r"   Ú_compute_mask_indicesrâ  B  sP  øøøøø€ ð0 #(Ñ€J�à�Q‚€ÝÐAÑBÔBÐBà�_Ò$Ð$Ýð:Ð^ið :ð :Ø'6ð:ð :ð :ñ
ô 
ð 	
õ Œi�nŠn˜QÑÔ×$Ò$Ñ&Ô&€Gðð ð ð ð ð ð ð ð ð$ Ð%ð 	×ÒÑÔ×#Ò# BÑ'Ô'×.Ò.Ñ0Ô0Ð0à9Ð9Ð9Ð9¥u¨ZÑ'8Ô'8Ð9Ñ9Ô9ð õ ”H˜j¨/Ð:Å$ÐGÑGÔG€MØÐà1Ð1°/ÑBÔBÐà˜aÒÐØÐà%ð 5ð 5ˆà1Ð1°,Ñ?Ô?ˆõ œI×,Ò,ÝŒI�l k°A¡oÑ6Ñ7Ô7¸ÐRWð -ñ 
ô 
Ðõ Ð Ñ!Ô! QÒ&Ð&ð -¨qÑ0ˆNˆNà.¨qÔ1ˆNåœNØ¥¤Ð(;¸oÑ(MÕUWÔU]Ð ^Ñ ^Ô ^ÐaoÑ oÐpñ
ô 
Ðð 	×!Ò!Ð"3Ñ4Ô4Ð4Ð4åœÐ"4Ñ5Ô5Ðõ œØ˜1˜1˜1˜a˜a˜a ˜:Ô&¨Ð5HÈ+Ð(Vñô Ðð ,×3Ò3°JÐ@SÐVaÑ@aÑbÔbÐõ Œi˜Ñ$Ô$ T¨4°°° ]Ô3€GÝŒo˜g¨
Ð4GÈÐ'UÑVÔV×^Ò^ØÐ'¨+Ñ5ñô €Gð ,¨gÑ5Ðð ×ÒÑÔ /°AÑ"5Ò5Ð5ØGVÐYZÑGZÐÐ-°À!Ñ0CÒCÑDõ Ô�mÐ%7¸¸BÑ?Ô?Ð?àÐr#   c                   óö   ‡ — e Zd Zdefˆ fd„Zd„ 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 )Ú
WavLMModelrL   c                 ó  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |j        dk    s|j        dk    rBt          j
        t          j        |j        ¦  «                             ¦   «         ¦  «        | _        |j        rt#          |¦  «        | _        nt'          |¦  «        | _        |j        rt+          |¦  «        nd | _        |                      ¦   «          d S )Nre   )r   r   rL   r¢  Úfeature_extractorrQ   Úfeature_projectionÚmask_time_probÚmask_feature_probr;   rv   rw   rÑ   r=   r_  Úmasked_spec_embedÚdo_stable_layer_normr(  Úencoderrý   rh  r¼  ÚadapterÚ	post_initr_   s     €r"   r   zWavLMModel.__init__¾  sé   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ!4°VÑ!<Ô!<ˆÔÝ"8¸Ñ"@Ô"@ˆÔð Ô  3Ò&Ð&¨&Ô*BÀSÒ*HÐ*HÝ%'¤\µ%´,¸vÔ?QÑ2RÔ2R×2[Ò2[Ñ2]Ô2]Ñ%^Ô%^ˆDÔ"àÔ&ð 	0Ý6°vÑ>Ô>ˆDŒLˆLå'¨Ñ/Ô/ˆDŒLà/5Ô/AÐK•| FÑ+Ô+Ð+ÀtˆŒð 	�ŠÑÔÐÐÐr#   c                 ó8   — | j                              ¦   «          dS ©z¨
        Calling this function will disable the gradient computation for the feature encoder so that its parameter will
        not be updated during training.
        N)ræ  r±  ©r   s    r"   Úfreeze_feature_encoderz!WavLMModel.freeze_feature_encoderÒ  s   € ð
 	Ô×1Ò1Ñ3Ô3Ð3Ð3Ð3r#   Nr'   Úmask_time_indicesr}   c                 ó  — t          | j        dd¦  «        s|S |                     ¦   «         \  }}}|�#| j                             |j        ¦  «        ||<   n“| j        j        dk    rƒ| j        r|t          ||f| j        j        | j        j	        || j        j
        ¬¦  «        }t          j        ||j        t          j        ¬¦  «        }| j                             |j        ¦  «        ||<   | j        j        dk    r†| j        rt          ||f| j        j        | j        j        | j        j        ¬¦  «        }t          j        ||j        t          j        ¬¦  «        }|dd…df                              d|d¦  «        }d||<   |S )	z¢
        Masks extracted features along time axis and/or along feature axis according to
        [SpecAugment](https://huggingface.co/papers/1904.08779).
        Úapply_spec_augmentTNr   )rÅ  rÆ  r}   rÇ  )r¹   r´   )rÅ  rÆ  rÇ  rS   )ÚgetattrrL   r…   rê  r¸   r´   rè  r§   râ  Úmask_time_lengthÚmask_time_min_masksrw   Útensorr¹   rÐ   ré  Úmask_feature_lengthÚmask_feature_min_masksÚexpand)r   r'   ró  r}   rK  rL  r=   Úmask_feature_indicess           r"   Ú_mask_hidden_stateszWavLMModel._mask_hidden_statesÙ  s—  € õ �t”{Ð$8¸$Ñ?Ô?ð 	!Ø Ð ð 4A×3EÒ3EÑ3GÔ3GÑ0ˆ
�O [àÐ(à/3Ô/E×/HÒ/HÈÔI\Ñ/]Ô/]ˆMÐ+Ñ,Ð,ØŒ[Ô'¨!Ò+Ð+°´Ð+Ý 5Ø˜_Ð-Øœ+Ô4Ø œKÔ8Ø-Øœ+Ô9ð!ñ !ô !Ðõ !&¤Ð->À}ÔG[ÕchÔcmÐ nÑ nÔ nÐØ/3Ô/E×/HÒ/HÈÔI\Ñ/]Ô/]ˆMÐ+Ñ,àŒ;Ô(¨1Ò,Ð,°´Ð,å#8Ø˜[Ð)Øœ+Ô7Ø œKÔ;Øœ+Ô<ð	$ñ $ô $Ð õ $)¤<Ð0DÈ]ÔMaÕinÔisÐ#tÑ#tÔ#tÐ Ø#7¸¸¸¸4¸Ô#@×#GÒ#GÈÈOÐ]_Ñ#`Ô#`Ð Ø23ˆMÐ.Ñ/àÐr#   rU  r   r  r  r€   c                 ó:  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|                      |¦  «        }|                     dd¦  «        }|�#|                      |j        d         |d¬¦  «        }|                      |¦  «        \  }	}|  	                    |	||¬¦  «        }	|  
                    |	||||¬¦  «        }
|
d         }	| j        �|                      |	¦  «        }	|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   r   Frz  )ró  r}   ©r}   r   r  r  r   )r  Úextract_featuresr'   r  )rL   r   r  r  ræ  rO   r€  rŠ   rç  rþ  rì  rí  ÚWavLMBaseModelOutputr'   r  )r   rU  r}   ró  r   r  r  Úkwargsr  r'   Úencoder_outputss              r"   r(   zWavLMModel.forward  s|  € ð  2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆà×1Ò1°,Ñ?Ô?ÐØ+×5Ò5°a¸Ñ;Ô;ÐàÐ%à!×DÒDØ Ô& qÔ)¨>Àuð Eñ ô ˆNð +/×*AÒ*AÐBRÑ*SÔ*SÑ'ˆÐ'Ø×0Ò0ØÐ->È~ð 1ñ 
ô 
ˆð Ÿ,š,ØØ)Ø/Ø!5Ø#ð 'ñ 
ô 
ˆð (¨Ô*ˆàŒ<Ð#Ø ŸLšL¨Ñ7Ô7ˆMàð 	KØ!Ð#3Ð4°ÀqÀrÀrÔ7JÑJÐJå#Ø+Ø-Ø)Ô7Ø&Ô1ð	
ñ 
ô 
ð 	
r#   )NN©NNNNN)r*   r+   r,   r   r   rò  rw   rÓ   rÔ   rþ  r   rÑ   rÐ   rÒ   r  r(   r-   r.   s   @r"   rä  rä  ¼  sF  ø€ € € € € ð˜{ð ð ð ð ð ð ð(4ð 4ð 4ð 7;Ø26ð	,ð ,àÔ(ð,ð !Ô,¨tÑ3ð,ð Ô(¨4Ñ/ð	,ð ,ð ,ð ,ð\ ð /3Ø6:Ø)-Ø,0Ø#'ð8
ð 8
à”l TÑ)ð8
ð œ tÑ+ð8
ð !Ô,¨tÑ3ð	8
ð
   $™;ð8
ð # T™kð8
ð ˜D‘[ð8
ð 
Ð%Ñ	%ð8
ð 8
ð 8
ñ „^ð8
ð 8
ð 8
ð 8
ð 8
r#   rä  r   zm
    WavLM 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 )ÚWavLMForCTCNÚtarget_langc                 óª  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        ¦  «        | _        || _        |j	        €t          d| j        › d�¦  «        ‚t          |d¦  «        r|j        r|j        n|j        }t	          j        ||j	        ¦  «        | _        |                      ¦   «          dS )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 [`WavLMForCTC`] 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: `WavLMForCTC.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.rh  )r   r   rä  rT  r;   r\   Úfinal_dropoutr^   r	  Ú
vocab_sizerp   r!   rA   rh  r·  r=   rZ   Úlm_headrî  )r   rL   r	  r·  r!   s       €r"   r   zWavLMForCTC.__init__L  sÝ   ø€ õ 	‰Œ×Ò˜Ñ Ô Ð å Ñ'Ô'ˆŒ
Ý”z &Ô"6Ñ7Ô7ˆŒà&ˆÔàÔÐ$ÝðH°´ð Hð Hð Hñô ð õ *1°¸Ñ)GÔ)GÐvÈFÔL^ÐvˆFÔ%Ð%ÐdjÔdvð 	õ ”yÐ!3°VÔ5FÑGÔGˆŒð 	�ŠÑÔÐÐÐr#   c                 óT  — t          ¦   «         t          j        d¦  «        k    rdS | j        }|�)t	          | j        dd¦  «        €t          d|› d�¦  «        ‚|€2t	          | j        dd¦  «        �t                               d¦  «         dS |�|  	                    |d¬¦  «         dS dS )	a'  
        This method overwrites [`~PreTrainedModel.tie_weights`] so that adapter weights can be correctly loaded when
        passing `target_lang=...` to `from_pretrained(...)`.

        This method is **not** supposed to be called by the user and is prone to be changed in the future.
        Ú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   rw   r¹   r	  rö  rL   rp   ÚloggerÚinfoÚload_adapter)r   r  r	  s      r"   Útie_weightszWavLMForCTC.tie_weightsi  sÃ   € õ 6Ñ7Ô7½5¼<ÈÑ;OÔ;OÒOÐOØˆFð Ô&ˆàÐ"¥w¨t¬{Ð<NÐPTÑ'UÔ'UÐ']ÝÐu¸;ÐuÐuÐuÑvÔvÐvØÐ ¥W¨T¬[Ð:LÈdÑ%SÔ%SÐ%_Ý�KŠKÐCÑDÔDÐDÐDÐDØÐ$Ø×Ò˜k°dÐÑ;Ô;Ð;Ð;Ð;ð %Ð$r#   c                 óB   — | j         j                             ¦   «          dS rð  ©rT  ræ  r±  rñ  s    r"   rò  z"WavLMForCTC.freeze_feature_encoder�  ó!   € ð
 	Œ
Ô$×7Ò7Ñ9Ô9Ð9Ð9Ð9r#   c                 óL   — | j                              ¦   «         D ]	}d|_        Œ
dS ©zÒ
        Calling this function will disable the gradient computation for the base model so that its parameters will not
        be updated during training. Only the classification head will be updated.
        FN©rT  r­  r®  r¯  s     r"   Úfreeze_base_modelzWavLMForCTC.freeze_base_modelˆ  ó6   € ð
 ”Z×*Ò*Ñ,Ô,ð 	(ð 	(ˆEØ"'ˆEÔÐð	(ð 	(r#   rU  r}   r   r  r  Úlabelsr€   c           
      óp  — |�|n| j         j        }|�>|                     ¦   «         | j         j        k    rt	          d| j         j        › �¦  «        ‚|                      |||||¬¦  «        }|d         }	|                      |	¦  «        }	|                      |	¦  «        }
d}|��Z|�|nt          j	        |t          j
        ¬¦  «        }|                      |                     d¦  «        ¦  «                             t          j
        ¦  «        }|dk    }|                     d¦  «        }|                     |¦  «        }t          j                             |
dt          j        ¬¦  «                             dd¦  «        }t          j        j                             d	¬
¦  «        5  t          j                             ||||| j         j        | j         j        | j         j        ¬¦  «        }ddd¦  «         n# 1 swxY w Y   |s|
f|t6          d…         z   }|�|f|z   n|S t9          ||
|j        |j        ¬¦  «        S )aà  
        labels (`torch.LongTensor` of shape `(batch_size, target_length)`, *optional*):
            Labels for connectionist temporal classification. Note that `target_length` has to be smaller or equal to
            the sequence length of the output logits. Indices are selected in `[-100, 0, ..., config.vocab_size - 1]`.
            All labels set to `-100` are ignored (masked), the loss is only computed for labels in `[0, ...,
            config.vocab_size - 1]`.
        Nz$Label values must be <= vocab_size: r   r   r³   rS   )r9   r´   r   F)Úenabled)ÚblankÚ	reductionÚzero_infinity©ÚlossÚlogitsr'   r  )rL   r  rË  r  rp   rT  r^   r  rw   Ú	ones_liker¶   rw  rŒ   r¸   Úmasked_selectr;   rD  Úlog_softmaxÚfloat32rO   ÚbackendsÚcudnnÚflagsÚctc_lossÚpad_token_idÚctc_loss_reductionÚctc_zero_infinityÚ_HIDDEN_STATES_START_POSITIONr   r'   r  )r   rU  r}   r   r  r  r  r  rõ   r'   r&  r%  rg  Úlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probsÚoutputs                     r"   r(   zWavLMForCTC.forward�  s€  € ð$ &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ &§*¢*¡,¤,°$´+Ô2HÒ"HÐ"HÝÐ\ÀDÄKÔDZÐ\Ð\Ñ]Ô]Ð]à—*’*ØØ)Ø/Ø!5Ø#ð ñ 
ô 
ˆð   œ
ˆØŸš ]Ñ3Ô3ˆà—’˜mÑ,Ô,ˆàˆØÑð #1Ð"<��Å%Ä/ÐR^ÕfkÔfpÐBqÑBqÔBqð ð !×AÒAÀ.×BTÒBTÐUWÑBXÔBXÑYÔY×\Ò\Õ]bÔ]gÑhÔhˆMð ! Aš+ˆKØ(Ÿ_š_¨RÑ0Ô0ˆNØ &× 4Ò 4°[Ñ AÔ AÐõ œ×1Ò1°&¸bÍÌÐ1ÑVÔV×`Ò`ÐabÐdeÑfÔfˆIå”Ô%×+Ò+°EÐ+Ñ:Ô:ð 	ð 	Ý”}×-Ò-ØØ%Ø!Ø"Øœ+Ô2Ø"œkÔ<Ø"&¤+Ô"?ð .ñ ô �ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ð 	FØ�Y Õ)FÐ)GÐ)GÔ!HÑHˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEåØ˜f°GÔ4IÐV]ÔVhð
ñ 
ô 
ð 	
s   Æ AG1Ç1G5Ç8G5ra   r  )r*   r+   r,   rß   r   r  rò  r  r   rw   rÑ   rÐ   rÒ   r   r(   r-   r.   s   @r"   r  r  F  s*  ø€ € € € € ðð ¨C°$©Jð ð ð ð ð ð ð:<ð <ð <ð0:ð :ð :ð(ð (ð (ð ð /3Ø)-Ø,0Ø#'Ø&*ðE
ð E
à”l TÑ)ðE
ð œ tÑ+ðE
ð   $™;ð	E
ð
 # T™kðE
ð ˜D‘[ðE
ð ”˜tÑ#ðE
ð 
�Ñ	ðE
ð E
ð E
ñ „^ðE
ð E
ð E
ð E
ð E
r#   r  z”
    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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 )ÚWavLMForSequenceClassificationc                 óô  •— t          ¦   «                              |¦  «         t          |d¦  «        r|j        rt	          d¦  «        ‚t          |¦  «        | _        |j        dz   }|j        r.t          j
        t          j        |¦  «        |z  ¦  «        | _        t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        |                      ¦   «          d S )Nrh  z\Sequence classification does not support the use of WavLM adapters (config.add_adapter=True)r   )r   r   rA   rh  rp   rä  rT  r	  Úuse_weighted_layer_sumr;   rv   rw   rx   Úlayer_weightsrZ   r=   Úclassifier_proj_sizeÚ	projectorÚ
num_labelsÚ
classifierrî  ©r   rL   Ú
num_layersr!   s      €r"   r   z'WavLMForSequenceClassification.__init__à  sá   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å�6˜=Ñ)Ô)ð 	¨fÔ.@ð 	ÝØnñô ð õ   Ñ'Ô'ˆŒ
ØÔ-°Ñ1ˆ
ØÔ(ð 	SÝ!#¤­e¬j¸Ñ.DÔ.DÀzÑ.QÑ!RÔ!RˆDÔÝœ 6Ô#5°vÔ7RÑSÔSˆŒÝœ) FÔ$?ÀÔARÑSÔSˆŒð 	�ŠÑÔÐÐÐr#   c                 óB   — | j         j                             ¦   «          dS rð  r  rñ  s    r"   rò  z5WavLMForSequenceClassification.freeze_feature_encoderñ  r  r#   c                 óL   — | j                              ¦   «         D ]	}d|_        Œ
dS r  r  r¯  s     r"   r  z0WavLMForSequenceClassification.freeze_base_modelø  r  r#   NrU  r}   r   r  r  r  r€   c                 ód  — |�|n| j         j        }| j         j        rdn|}|                      |||||¬¦  «        }| j         j        rx|t                   }	t          j        |	d¬¦  «        }	t          j         	                    | j
        d¬¦  «        }
|	|
                     ddd¦  «        z                       d¬¦  «        }	n|d         }	|                      |	¦  «        }	|€|	                     d¬¦  «        }n�|                      |	j        d         |¦  «        }|                     d¦  «                             dd|	j        d         ¦  «        }d	|	| <   |	                     d¬¦  «        |                     d¬¦  «                             dd¦  «        z  }|                      |¦  «        }d}|�Kt)          ¦   «         } ||                     d| j         j        ¦  «        |                     d¦  «        ¦  «        }|s|f|t          d…         z   }|�|f|z   n|S t-          |||j        |j        ¬
¦  «        S )á	  
        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 [`WavLMProcessor.__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ƒ   rS   r   r   re   r$  )rL   r  r;  rT  r2  rw   Ústackr;   rD  rG  r<  r‰   rŒ   r>  r9  r€  rŠ   r‡   rˆ   r@  r   r?  r   r'   r  )r   rU  r}   r   r  r  r  r  rõ   r'   Únorm_weightsÚpooled_outputÚpadding_maskÚexpand_padding_maskr&  r%  Úloss_fctr7  s                     r"   r(   z&WavLMForSequenceClassification.forward   sW  € ð0 &1Ð%<�k�kÀ$Ä+ÔBYˆØ'+¤{Ô'IÐc˜t˜tÐOcÐà—*’*ØØ)Ø/Ø!5Ø#ð ñ 
ô 
ˆð Œ;Ô-ð 	'Ø#Õ$AÔBˆMÝ!œK¨¸1Ð=Ñ=Ô=ˆMÝœ=×0Ò0°Ô1CÈÐ0ÑLÔLˆLØ*¨\×->Ò->¸rÀ1ÀaÑ-HÔ-HÑH×MÒMÐRSÐMÑTÔTˆMˆMà# AœJˆMàŸš }Ñ5Ô5ˆØÐ!Ø)×.Ò.°1Ð.Ñ5Ô5ˆMˆMà×BÒBÀ=ÔCVÐWXÔCYÐ[iÑjÔjˆLØ".×"8Ò"8¸Ñ"<Ô"<×"CÒ"CÀAÀqÈ-ÔJ]Ð^_ÔJ`Ñ"aÔ"aÐØ25ˆMÐ.Ð.Ñ/Ø)×-Ò-°!Ð-Ñ4Ô4°|×7GÒ7GÈAÐ7GÑ7NÔ7N×7SÒ7SÐTVÐXYÑ7ZÔ7ZÑZˆMà—’ Ñ/Ô/ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬KÔ,BÑCÔCÀVÇ[Â[ÐQSÁ_Ä_ÑUÔUˆDàð 	FØ�Y Õ)FÐ)GÐ)GÔ!HÑHˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r#   r  )r*   r+   r,   r   rò  r  r   rw   rÑ   rÐ   rÒ   r   r(   r-   r.   s   @r"   r9  r9  Ù  s  ø€ € € € € ðð ð ð ð ð":ð :ð :ð(ð (ð (ð ð /3Ø)-Ø,0Ø#'Ø&*ðC
ð C
à”l TÑ)ðC
ð œ tÑ+ðC
ð   $™;ð	C
ð
 # T™kðC
ð ˜D‘[ðC
ð ”˜tÑ#ðC
ð 
Ð)Ñ	)ðC
ð C
ð C
ñ „^ðC
ð C
ð C
ð C
ð C
r#   r9  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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 )Ú WavLMForAudioFrameClassificationc                 óÄ  •— t          ¦   «                              |¦  «         t          |d¦  «        r|j        rt	          d¦  «        ‚t          |¦  «        | _        |j        dz   }|j        r.t          j
        t          j        |¦  «        |z  ¦  «        | _        t          j        |j        |j        ¦  «        | _        |j        | _        |                      ¦   «          d S )Nrh  z_Audio frame classification does not support the use of WavLM adapters (config.add_adapter=True)r   )r   r   rA   rh  rp   rä  rT  r	  r;  r;   rv   rw   rx   r<  rZ   r=   r?  r@  rî  rA  s      €r"   r   z)WavLMForAudioFrameClassification.__init__I  sÐ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å�6˜=Ñ)Ô)ð 	¨fÔ.@ð 	ÝØqñô ð õ   Ñ'Ô'ˆŒ
ØÔ-°Ñ1ˆ
ØÔ(ð 	SÝ!#¤­e¬j¸Ñ.DÔ.DÀzÑ.QÑ!RÔ!RˆDÔÝœ) FÔ$6¸Ô8IÑJÔJˆŒØ Ô+ˆŒà�ŠÑÔÐÐÐr#   c                 óB   — | j         j                             ¦   «          dS rð  r  rñ  s    r"   rò  z7WavLMForAudioFrameClassification.freeze_feature_encoderY  r  r#   c                 óL   — | j                              ¦   «         D ]	}d|_        Œ
dS r  r  r¯  s     r"   r  z2WavLMForAudioFrameClassification.freeze_base_model`  r  r#   NrU  r}   r  r   r  r  r€   c           	      óè  — |�|n| j         j        }| j         j        rdn|}|                      |||||¬¦  «        }| j         j        rx|t                   }	t          j        |	d¬¦  «        }	t          j         	                    | j
        d¬¦  «        }
|	|
                     ddd¦  «        z                       d¬¦  «        }	n|d         }	|                      |	¦  «        }d}|�`t          ¦   «         } ||                     d| j        ¦  «        t          j        |                     d| j        ¦  «        d¬¦  «        ¦  «        }|s|f|t          d…         z   }|S t#          |||j        |j        ¬	¦  «        S )
rF  NTr   r   rƒ   rS   r   )Úaxisr$  )rL   r  r;  rT  r2  rw   rG  r;   rD  rG  r<  r‰   rŒ   r@  r   r?  rH  r   r'   r  )r   rU  r}   r  r   r  r  r  rõ   r'   rH  r&  r%  rL  r7  s                  r"   r(   z(WavLMForAudioFrameClassification.forwardh  s�  € ð0 &1Ð%<�k�kÀ$Ä+ÔBYˆØ'+¤{Ô'IÐc˜t˜tÐOcÐà—*’*ØØ)Ø/Ø!5Ø#ð ñ 
ô 
ˆð Œ;Ô-ð 	'Ø#Õ$AÔBˆMÝ!œK¨¸1Ð=Ñ=Ô=ˆMÝœ=×0Ò0°Ô1CÈÐ0ÑLÔLˆLØ*¨\×->Ò->¸rÀ1ÀaÑ-HÔ-HÑH×MÒMÐRSÐMÑTÔTˆMˆMà# AœJˆMà—’ Ñ/Ô/ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<½e¼lÈ6Ï;Ê;ÐWYÐ[_Ô[jÑKkÔKkÐrsÐ>tÑ>tÔ>tÑuÔuˆDàð 	Ø�Y Õ)FÐ)GÐ)GÔ!HÑHˆFØˆMå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r#   r  )r*   r+   r,   r   rò  r  r   rw   rÑ   rÐ   rÒ   r   r(   r-   r.   s   @r"   rN  rN  G  s÷   ø€ € € € € ðð ð ð ð ð :ð :ð :ð(ð (ð (ð ð /3Ø&*Ø)-Ø,0Ø#'ð:
ð :
à”l TÑ)ð:
ð œ tÑ+ð:
ð ”˜tÑ#ð	:
ð
   $™;ð:
ð # T™kð:
ð ˜D‘[ð:
ð 
Ð&Ñ	&ð:
ð :
ð :
ñ „^ð:
ð :
ð :
ð :
ð :
r#   rN  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚAMSoftmaxLossç      >@çš™™™™™Ù?c                 óþ   •— t          ¦   «                              ¦   «          || _        || _        || _        t          j        t          j        ||¦  «        d¬¦  «        | _	        t          j
        ¦   «         | _        d S )NT)r®  )r   r   ÚscaleÚmarginr?  r;   rv   rw   Úrandnr7   r   r%  )r   Ú	input_dimr?  rY  rZ  r!   s        €r"   r   zAMSoftmaxLoss.__init__§  se   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ØˆŒØ$ˆŒÝ”l¥5¤;¨y¸*Ñ#EÔ#EÐUYÐZÑZÔZˆŒÝÔ'Ñ)Ô)ˆŒ	ˆ	ˆ	r#   c                 óÐ  — |                      ¦   «         }t          j                             | j        d¬¦  «        }t          j                             |d¬¦  «        }t          j        ||¦  «        }|| j        z
  }t          j                             || j	        ¦  «        }| j
        t          j        |                     ¦   «         ||¦  «        z  }|                      ||¦  «        }|S )Nr   rƒ   r   )Úflattenr;   rD  Ú	normalizer7   rw   ÚmmrZ  Úone_hotr?  rY  rÇ   rÐ   r%  )	r   r'   r  r7   Ú	cos_thetaÚpsiÚonehotr&  r%  s	            r"   r(   zAMSoftmaxLoss.forward¯  s·   € Ø—’Ñ!Ô!ˆÝ”×(Ò(¨¬¸!Ð(Ñ<Ô<ˆÝœ×/Ò/°À1Ð/ÑEÔEˆÝ”H˜]¨FÑ3Ô3ˆ	Ø˜$œ+Ñ%ˆå”×&Ò& v¨t¬Ñ?Ô?ˆØ”�eœk¨&¯+ª+©-¬-¸¸iÑHÔHÑHˆØ�yŠy˜ Ñ(Ô(ˆàˆr#   )rV  rW  r)   r.   s   @r"   rU  rU  ¦  sL   ø€ € € € € ð*ð *ð *ð *ð *ð *ðð ð ð ð ð ð r#   rU  c                   óD   ‡ — e Zd Zdˆ fd„	Zdej        dej        fd„Zˆ xZS )Ú	TDNNLayerr   c                 óŒ  •— t          ¦   «                              ¦   «          |dk    r|j        |dz
           n|j        |         | _        |j        |         | _        |j        |         | _        |j        |         | _        t          j
        | j        | j        z  | j        ¦  «        | _        t          j        ¦   «         | _        d S )Nr   r   )r   r   Útdnn_dimrŽ  r�  Útdnn_kernelr2   Útdnn_dilationÚdilationr;   rZ   ÚkernelÚReLUrK   r‘  s      €r"   r   zTDNNLayer.__init__¾  s¡   ø€ Ý‰Œ×ÒÑÔÐØ<DÀqºL¸L˜6œ?¨8°a©<Ô8Ð8ÈfÌoÐ^fÔNgˆÔØ"œO¨HÔ5ˆÔØ!Ô-¨hÔ7ˆÔØÔ,¨XÔ6ˆŒå”i Ô 0°4Ô3CÑ CÀTÔEVÑWÔWˆŒÝœ'™)œ)ˆŒˆˆr#   r'   r€   c                 ó
  — t          ¦   «         rddlm} t          ¦   «         r)t          | j        |¦  «        rt          j        d¦  «         |                     dd¦  «        }| j        j         	                    | j
        | j        | j        ¦  «                             dd¦  «        }t          j                             ||| j        j        | j        ¬¦  «        }|                     dd¦  «        }|                      |¦  «        }|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   )rk  )r   Úpeft.tuners.loraro  rÝ   rl  ÚwarningsÚwarnrO   r7   r‰   r�  r2   rŽ  r;   rD  Úconv1dr¦   rk  rK   )r   r'   ro  r7   s       r"   r(   zTDNNLayer.forwardÈ  sÿ   € ÝÑÔð 	3Ø2Ð2Ð2Ð2Ð2Ð2åÑÔð 	Ý˜$œ+ yÑ1Ô1ð Ý”ðOñô ð ð &×/Ò/°°1Ñ5Ô5ˆØ”Ô#×(Ò(¨Ô):¸DÔ<LÈdÔN^Ñ_Ô_×iÒiÐjkÐmnÑoÔoˆÝœ×,Ò,¨]¸FÀDÄKÔDTÐ_cÔ_lÐ,ÑmÔmˆØ%×/Ò/°°1Ñ5Ô5ˆàŸš¨Ñ6Ô6ˆØÐr#   r”  )r*   r+   r,   r   rw   rÑ   r(   r-   r.   s   @r"   rf  rf  ½  sc   ø€ € € € € ð$ð $ð $ð $ð $ð $ð U¤\ð °e´lð ð ð ð ð ð ð ð r#   rf  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ej        ez  fd„Z	e
	 	 	 	 	 ddej        dz  dej        dz  d	edz  d
edz  dedz  dej        dz  deez  fd„¦   «         Zˆ xZS )ÚWavLMForXVectorc                 óÚ  •‡— t          ¦   «                              ‰¦  «         t          ‰¦  «        | _        ‰j        dz   }‰j        r.t          j        t          j	        |¦  «        |z  ¦  «        | _
        t          j        ‰j        ‰j        d         ¦  «        | _        ˆfd„t          t!          ‰j        ¦  «        ¦  «        D ¦   «         }t          j        |¦  «        | _        t          j        ‰j        d         dz  ‰j        ¦  «        | _        t          j        ‰j        ‰j        ¦  «        | _        t-          ‰j        ‰j        ¦  «        | _        |                      ¦   «          d S )Nr   r   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r  )rf  r  s     €r"   r  z,WavLMForXVector.__init__.<locals>.<listcomp>ì  s#   ø€ ÐQÐQÐQ°•y ¨Ñ+Ô+ÐQÐQÐQr#   rS   r   )r   r   rä  rT  r	  r;  r;   rv   rw   rx   r<  rZ   r=   rh  r>  r  rÕ  r  ÚtdnnÚxvector_output_dimræ  r@  rU  r?  Ú	objectiverî  )r   rL   rB  Útdnn_layersr!   s    `  €r"   r   zWavLMForXVector.__init__ã  s'  øø€ Ý‰Œ×Ò˜Ñ Ô Ð å Ñ'Ô'ˆŒ
ØÔ-°Ñ1ˆ
ØÔ(ð 	SÝ!#¤­e¬j¸Ñ.DÔ.DÀzÑ.QÑ!RÔ!RˆDÔÝœ 6Ô#5°v´ÀqÔ7IÑJÔJˆŒàQÐQÐQÐQµU½3¸v¼Ñ;OÔ;OÑ5PÔ5PÐQÑQÔQˆÝ”M +Ñ.Ô.ˆŒ	å!#¤¨6¬?¸2Ô+>ÀÑ+BÀFÔD]Ñ!^Ô!^ˆÔÝœ) FÔ$=¸vÔ?XÑYÔYˆŒå& vÔ'@À&ÔBSÑTÔTˆŒà�ŠÑÔÐÐÐr#   c                 óB   — | j         j                             ¦   «          dS rð  r  rñ  s    r"   rò  z&WavLMForXVector.freeze_feature_encoderö  r  r#   c                 óL   — | j                              ¦   «         D ]	}d|_        Œ
dS r  r  r¯  s     r"   r  z!WavLMForXVector.freeze_base_modelý  r  r#   rg  c                 óD   — d„ }| j         j        D ]} |||d¦  «        }Œ|S )z?
        Computes the output length of the TDNN layers
        c                 ó   — | |z
  |z  dz   S )Nr   r  rn  s      r"   rq  zBWavLMForXVector._get_tdnn_output_lengths.<locals>._conv_out_length
  s   € ð ! ;Ñ.°6Ñ9¸AÑ=Ð=r#   r   )rL   ri  )r   rg  rq  r2   s       r"   Ú_get_tdnn_output_lengthsz(WavLMForXVector._get_tdnn_output_lengths  sE   € ð
	>ð 	>ð 	>ð
  œ;Ô2ð 	Lð 	LˆKØ,Ð,¨]¸KÈÑKÔKˆMˆMàÐr#   NrU  r}   r   r  r  r  r€   c                 ó>  — |�|n| j         j        }| j         j        rdn|}|                      |||||¬¦  «        }| j         j        rx|t                   }	t          j        |	d¬¦  «        }	t          j         	                    | j
        d¬¦  «        }
|	|
                     ddd¦  «        z                       d¬¦  «        }	n|d         }	|                      |	¦  «        }	| j        D ]} ||	¦  «        }	Œ|€-|	                     d¬¦  «        }|	                     d¬¦  «        }nå|                      |                     d¬¦  «        ¦  «        }|                      |¦  «        }g }g }t'          |¦  «        D ]k\  }}|                     |	|d|…f                              d¬¦  «        ¦  «         |                     |	|d|…f                              d¬¦  «        ¦  «         Œlt          j        |¦  «        }t          j        |¦  «        }t          j        ||gd¬¦  «        }|                      |¦  «        }|                      |¦  «        }d}|�|                      ||¦  «        }|s||f|t          d…         z   }|�|f|z   n|S t3          ||||j        |j        ¬¦  «        S )	rF  NTr   r   rƒ   rS   r   )r%  r&  Ú
embeddingsr'   r  )rL   r  r;  rT  r2  rw   rG  r;   rD  rG  r<  r‰   rŒ   r>  rx  r9  rX  rw  r€  r  rØ  r¥   ræ  r@  rz  r   r'   r  )r   rU  r}   r   r  r  r  r  rõ   r'   rH  Ú
tdnn_layerÚmean_featuresÚstd_featuresÚfeat_extract_output_lengthsÚtdnn_output_lengthsr  ÚlengthÚstatistic_poolingÚoutput_embeddingsr&  r%  r7  s                          r"   r(   zWavLMForXVector.forward  sð  € ð0 &1Ð%<�k�kÀ$Ä+ÔBYˆØ'+¤{Ô'IÐc˜t˜tÐOcÐà—*’*ØØ)Ø/Ø!5Ø#ð ñ 
ô 
ˆð Œ;Ô-ð 	'Ø#Õ$AÔBˆMÝ!œK¨¸1Ð=Ñ=Ô=ˆMÝœ=×0Ò0°Ô1CÈÐ0ÑLÔLˆLØ*¨\×->Ò->¸rÀ1ÀaÑ-HÔ-HÑH×MÒMÐRSÐMÑTÔTˆMˆMà# AœJˆMàŸš }Ñ5Ô5ˆàœ)ð 	6ð 	6ˆJØ&˜J }Ñ5Ô5ˆMˆMð Ð!Ø)×.Ò.°1Ð.Ñ5Ô5ˆMØ(×,Ò,°Ð,Ñ3Ô3ˆLˆLà*.×*OÒ*OÐP^×PbÒPbÐghÐPbÑPiÔPiÑ*jÔ*jÐ'Ø"&×"?Ò"?Ð@[Ñ"\Ô"\ÐØˆMØˆLÝ&Ð':Ñ;Ô;ð Jð J‘	��6Ø×$Ò$ ]°1°g°v°g°:Ô%>×%CÒ%CÈÐ%CÑ%JÔ%JÑKÔKÐKØ×#Ò# M°!°W°f°W°*Ô$=×$AÒ$AÀaÐ$AÑ$HÔ$HÑIÔIÐIÐIÝ!œK¨Ñ6Ô6ˆMÝ œ; |Ñ4Ô4ˆLÝ!œI }°lÐ&CÈÐLÑLÔLÐà ×2Ò2Ð3DÑEÔEÐØ—’Ð!2Ñ3Ô3ˆàˆØÐØ—>’> &¨&Ñ1Ô1ˆDàð 	FØÐ/Ð0°7Õ;XÐ;YÐ;YÔ3ZÑZˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEåØØØ(Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r#   r  )r*   r+   r,   r   rò  r  rw   rÔ   rÏ   r€  r   rÑ   rÐ   rÒ   r   r(   r-   r.   s   @r"   ru  ru  Ý  s)  ø€ € € € € ðð ð ð ð ð&:ð :ð :ð(ð (ð (ð°eÔ6FÈÑ6Lð ð ð ð ð ð /3Ø)-Ø,0Ø#'Ø&*ðP
ð P
à”l TÑ)ðP
ð œ tÑ+ðP
ð   $™;ð	P
ð
 # T™kðP
ð ˜D‘[ðP
ð ”˜tÑ#ðP
ð 
�Ñ	ðP
ð P
ð P
ñ „^ðP
ð P
ð P
ð P
ð P
r#   ru  )rN  r  r9  ru  rä  rS  r%   )KrÄ   rq  ÚnumpyrÂ  rw   Útorch.nnr;   Útorch.nn.functionalrD  r¢   r   Ú r   r\  Úactivationsr   Úintegrations.deepspeedr   Úintegrations.fsdpr   Úmodeling_layersr	   Úmodeling_outputsr
   r   r   r   r   r   Úmodeling_utilsr   r   r@   r   r   r   Úconfiguration_wavlmr   Ú
get_loggerr*   r  ÚModuler   r0   rQ   rd   r×   ræ   rù   rý   r(  r.  rS  r‹  r–  r›  r¢  rµ  r¼  rÒ   rÏ   rÃ   rÔ   Úndarrayrâ  r  rä  r2  r  r9  rN  rU  rf  ru  Ú__all__r  r#   r"   ú<module>rš     s  ðð €€€Ø €€€à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø @Ð @Ð @Ð @Ð @Ð @Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ZÐ YÐ YÐ YÐ YÐ YÐ YÐ YØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð ˜œ	ñ ô ð ð*ð *ð *ð *ð * 2¤9ñ *ô *ð *ðZ1ð 1ð 1ð 1ð 1˜RœYñ 1ô 1ð 1ðc ð c ð c ð c ð c �R”Yñ c ô c ð c ðLð ð ð ð �r”yñ ô ð ð0&ð &ð &ð &ð &Ð2ñ &ô &ð &ðR"ð "ð "ð "ð "Ð'Añ "ô "ð "ðJG
ð G
ð G
ð G
ð G
�2”9ñ G
ô G
ð G
ðTH
ð H
ð H
ð H
ð H
 "¤)ñ H
ô H
ð H
ðVC'ð C'ð C'ð C'ð C' ¤ñ C'ô C'ð C'ðL ðLð Lð Lð Lð L˜?ñ Lô Lñ „ðLð^ð ð ð ð Ð :ñ ô ð ð*ð ð ð ð Ð8ñ ô ð ð6ð ð ð ð Ð8ñ ô ð ð0#ð #ð #ð #ð #˜"œ)ñ #ô #ð #ðLð ð ð ð ˜œ	ñ ô ð ð$ð ð ð ð �2”9ñ ô ð ðF /3Øðtð tØ��c�Œ?ðtàðtð ðtð Ô$ tÑ+ð	tð
 ðtð „Zðtð tð tð tðn /Ð ð ðC
ð C
ð C
ð C
ð C
Ð%ñ C
ô C
ñ „ðC
ðL !"Ð ð €ððñ ô ð
K
ð K
ð K
ð K
ð K
Ð&ñ K
ô K
ñô ð
K
ð\ €ððñ ô ðe
ð e
ð e
ð e
ð e
Ð%9ñ e
ô e
ñô ðe
ðP ð[
ð [
ð [
ð [
ð [
Ð';ñ [
ô [
ñ „ð[
ð|ð ð ð ð �B”Iñ ô ð ð.ð ð ð ð �”	ñ ô ð ð@ €ððñ ô ð
C
ð C
ð C
ð C
ð C
Ð*ñ C
ô C
ñô ð
C
ðLð ð €€€r#   