Ë
    ÜÓ^j† ã                   óæ  — 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#jL                  e'«      Z( G d„ dejR                  «      Z* G d„ dejR                  «      Z+ G d„ dejR                  «      Z, G d„ dejR                  «      Z- G d„ dejR                  «      Z. G d„ de«      Z/ G d„ de«      Z0 G d„ dejR                  «      Z1 G d„ dejR                  «      Z2 G d „ d!ejR                  «      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jR                  «      Z8 G d,„ d-ejR                  «      Z9 G d.„ d/ejR                  «      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jR                  «      ZG G dE„ dFejR                  «      ZH e!dG¬;«       G dH„ dIe4«      «       ZIg dJ¢ZJy)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                 ó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     €ús/var/www/ramen.bs-engineer-server.com/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.forward*   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Ú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‘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   )Ú	transposer?   r3   rK   r&   s     r"   r(   z$WavLMPositionalConvEmbedding.forwardR   sV   € Ø%×/Ñ/°°1Ó5ˆàŸ	™	 -Ó0ˆØŸ™ ]Ó3ˆØŸ™¨Ó6ˆà%×/Ñ/°°1Ó5ˆØÐr#   r)   r.   s   @r"   r0   r0   0   s   ø„ ôAöBr#   r0   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   rL   r!   s     €r"   r   zWavLMFeatureProjection.__init__^   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)rY   r[   r^   )r   r'   Únorm_hidden_statess      r"   r(   zWavLMFeatureProjection.forwardd   s:   € à!Ÿ_™_¨]Ó;ÐØŸ™Ð(:Ó;ˆØŸ™ ]Ó3ˆØÐ0Ð0Ð0r#   r)   r.   s   @r"   rQ   rQ   ]   s   ø„ ô<ö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Ú	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   re   rf   r^   Úhead_dimÚ
ValueErrorÚscalingr;   rZ   Úk_projÚv_projÚq_projÚout_projrg   rh   Ú	ParameterÚtorchÚonesÚgru_rel_pos_constÚgru_rel_pos_linearÚ	EmbeddingÚrel_attn_embed)r   re   rf   r^   rg   rh   ri   r!   s          €r"   r   zWavLMAttention.__init__o   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#   Nr'   Ú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   rS   r   r   )r   é   ©r9   ç      ð?g       @)ÚsizeÚcompute_biasÚ	unsqueezeÚrepeatÚviewrf   ÚshapeÚpermuterw   Úsumrt   ÚsigmoidÚchunkrv   Útorch_multi_head_self_attention)r   r'   rz   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)rO   ÚneÚFÚmulti_head_attention_forwardre   rf   rt   ÚemptyÚcatrq   Úbiasro   rp   r^   rr   r7   ÚtrainingÚbroadcast_tor‡   )r   r'   rz   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   )	rt   ÚarangeÚlongÚ_relative_positions_bucketÚtory   r7   Ú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   )rg   rµ   rt   r³   ÚabsÚlogÚfloatÚmathrh   ÚminÚ	full_likeÚwhere)r   r¼   rg   Ú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   rt   ÚTensorÚtupler(   ÚFloatTensorÚ
LongTensorÚ
BoolTensorrŒ   rƒ   r´   r-   r.   s   @r"   rd   rd   l   s‰  ø„ ÙGð  #ØØØ+/ñ"Qàð"Qð ð"Qð ˜‘ð	"Qð
 ð"Qð ð"Qð %)õ"QðN /3Ø-1Ø"'Øñ'8à—|‘|ð'8ð Ÿ™ tÑ+ð'8ð —|‘| dÑ*ð	'8ð
  ð'8ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	Mó'8ðR5)à×(Ñ(ð5)ð ×(Ñ(¨5×+;Ñ+;Ñ;ð5)ð #×.Ñ.ð	5)ð
  ð5)ð 
ˆu× Ñ  %×"3Ñ"3Ð3Ñ	4ó5)ðn¨ð ¸#ð À%×BSÑBSó ð ¸U×=NÑ=Nð  ÐSX×SdÑ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                   «      | _        y 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¡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 ra   )rÚ   rÞ   rØ   rß   rá   r&   s     r"   r(   zWavLMFeedForward.forward   sX   € Ø×/Ñ/°Ó>ˆØ×0Ñ0°Ó?ˆØ×1Ñ1°-Ó@ˆà×)Ñ)¨-Ó8ˆØ×+Ñ+¨MÓ:ˆØÐr#   r)   r.   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 )ÚWavLMEncoderLayerrL   ri   c                 óÚ  •— t         ‰| �  «        t        |j                  |j                  |j
                  |j                  |j                  |¬«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t!        |«      | _        t        j                  |j                  |j                  ¬«      | _        y ©N)re   rf   r^   rg   rh   ri   rT   ©r   r   rd   r=   Únum_attention_headsÚattention_dropoutrg   Úmax_bucket_distanceÚ	attentionr;   r\   rà   r^   rV   rX   rY   rÕ   Úfeed_forwardÚfinal_layer_norm©r   rL   ri   r!   s      €r"   r   zWavLMEncoderLayer.__init__+  ó¬   ø€ Ü‰ÑÔÜ'Ø×(Ñ(Ø×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©rz   r{   r|   r�   )rë   r^   rY   rì   rí   )	r   r'   rz   r{   r|   r�   Úattn_residualr˜   Úoutputss	            r"   r(   zWavLMEncoderLayer.forward:  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-   r.   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 )Ú WavLMEncoderLayerStableLayerNormrL   ri   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__T  rï   r#   c                 óè   — |}| j                  |«      }| j                  ||||¬«      \  }}}| j                  |«      }||z   }|| j                  | j	                  |«      «      z   }||f}|r||fz  }|S )N)rz   r{   r|   )rY   rë   r^   rì   rí   )r   r'   rz   r{   r|   rò   r˜   ró   s           r"   r(   z(WavLMEncoderLayerStableLayerNorm.forwardc  s•   € Ø%ˆØŸ™¨Ó6ˆØ59·^±^ØØ)Ø'Ø/ð	 6Dó 6
Ñ2ˆ�| ]ð Ÿ™ ]Ó3ˆØ%¨Ñ5ˆØ%¨×(9Ñ(9¸$×:OÑ:OÐP]Ó:^Ó(_Ñ_ˆà  -Ð0ˆáØ˜�Ñ&ˆGàˆr#   rô   )NNFrõ   r.   s   @r"   r÷   r÷   S  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 ©NrT   r   )ri   F)r   r   rL   r0   Úpos_conv_embedr;   rV   r=   rX   rY   r\   rà   r^   Ú
ModuleListÚrangeÚnum_hidden_layersrä   ÚlayersÚgradient_checkpointing©r   rL   Úir!   s      €r"   r   zWavLMEncoder.__init__y  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 ]y  \  }}|r||fz   }t        j                  g «      }| j                  xr  |dkD  xr || j                  j                  k  }|r|
r ||||||¬«      }|d d \  }}|rd}|sŒq|d   fz   }Œ{ |r||fz   }|st        d„ |||fD «       «      S t!        |||¬	«      S )
N© rS   r   r   r   rñ   ©NNNc              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wra   r  ©Ú.0Úvs     r"   ú	<genexpr>z'WavLMEncoder.forward.<locals>.<genexpr>º  ó   è ø€ Òm˜qÐ_`Ñ_lœÑmùó   ‚Š©Úlast_hidden_stater'   Ú
attentions)r„   r…   r‡   rþ   rY   r^   r   r   Ú	enumerater  rt   Úrandr¤   rL   Ú	layerdroprÐ   r
   ©r   r'   rz   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Ù!¡[á %Ø!Ø#1Ø"/Ø&7Øô!�ð 0=¸R¸aÐ/@Ñ,�˜}áØ 2�â Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð1	Pñ4  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ø+Ø*ô
ð 	
r#   ©NFFTr)   r.   s   @r"   rû   rû   x  s   ø„ ô	,ð ØØ"Ø÷;
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   rL   r0   rþ   r;   rV   r=   rX   rY   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 ]x  \  }}|r||fz   }t        j                  g «      }| j                  xr  |dkD  xr || j                  j                  k  }|r|
r |||||¬«      }|d d \  }}|rd}|sŒp|d   fz   }Œz | j                  |«      }|r||fz   }|st        d„ |||fD «       «      S t!        |||¬	«      S )
Nr  rS   r   r   r   )rz   r|   r{   r	  c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wra   r  r  s     r"   r  z6WavLMEncoderStableLayerNorm.forward.<locals>.<genexpr>  r  r  r  )r„   r…   r‡   rþ   r^   r   r   r  r  rt   r  r¤   rL   r  rY   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Ù!¡[ñ !&Ø!Ø#1Ø&7Ø"/ô	!�ð 0=¸R¸aÐ/@Ñ,�˜}áØ 2�â Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð/	Pð2 Ÿ™¨Ó6ˆáØ 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ð;LÐYlô
ð 	
r#   r#  r)   r.   s   @r"   r%  r%  Â  s   ø„ ô,ð" ØØ"Ø÷9
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://huggingface.co/papers/1611.01144) 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   rS   r   )r   r   Únum_codevector_groupsÚ
num_groupsÚnum_codevectors_per_groupÚnum_varsÚcodevector_dimrm   r;   rs   rt   rÑ   ÚcodevectorsrZ   rW   Úweight_projÚtemperaturer_   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¬«       «      j                  «       }|S )Nr   r€   rS   )Úmeanrt   Úexpr‰   Úxlogy)ÚprobsÚmarginal_probsÚ
perplexitys      r"   Ú_compute_perplexityz.WavLMGumbelVectorQuantizer._compute_perplexity(  sI   € àŸ™¨˜Ó*ˆÜ—Y‘Y¤§	¡	¬%¯+©+°nÀnÓ*UÐ[]Ô ^Ð^Ó_×cÑcÓeˆ
ØÐ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 )NrS   T)ÚtauÚhardr€   r   r�   éþÿÿÿ)r‡   r2  r†   r-  r¤   r;   Ú
functionalÚgumbel_softmaxrÀ   r3  Útype_asrt   Úsoftmaxr;  ÚargmaxÚ	new_zerosÚscatter_r„   r1  r/  r‰   )r   r'   Ú
batch_sizeÚsequence_lengthr=   Úcodevector_probsÚcodevector_soft_distr:  Úcodevector_idxÚcodevectors_per_groupr1  s              r"   r(   z"WavLMGumbelVectorQuantizer.forward.  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-   r.   s   @r"   r*  r*    s&   ø„ ñô
ð* ñó ðö
"'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           
      ó  •— t         ‰| �  |«       t        |t        «      rut	        j
                  |j                  j                  dd¬«       t	        j                  |j                  j                  «       t	        j                  |j                  «       yt        |t        «      ržt	        j
                  |j                  j                  ddt        j                  d|j                  j                   d   |j                  j"                  z  z  «      z  ¬«       t	        j$                  |j                  j                  d«       yt        |t&        «      r‡t        j                  d|j(                  j*                  z  «      }t	        j                  |j(                  j                  | |¬«       t	        j                  |j(                  j                  | |¬«       yt        |t,        j.                  «      rŒt	        j0                  |j                  «       |j                  �`t        j                  |j2                  |j"                  |j                   d   z  z  «      }t	        j                  |j                  | |¬«       yyy)zInitialize the weightsrÊ   r   )r5  Ústdr   r   )ÚaÚbN)r   Ú_init_weightsrÛ   r*  ÚinitÚnormal_r2  r7   Úzeros_r£   Úuniform_r1  r0   r?   rÁ   Úsqrtr2   Úin_channelsÚ	constant_rQ   r[   Úin_featuresr;   r<   Úkaiming_normal_r4   )r   ÚmoduleÚkr!   s      €r"   rW  z"WavLMPreTrainedModel._init_weights^  s¶  ø€ ô 	‰Ñ˜fÔ%ä�fÔ8Ô9Ü�L‰L˜×+Ñ+×2Ñ2¸À!ÕDÜ�K‰K˜×*Ñ*×/Ñ/Ô0Ü�M‰M˜&×,Ñ,Õ-Ü˜Ô <Ô=Ü�L‰LØ—‘×"Ñ"ØØœŸ	™	 ! v§{¡{×'>Ñ'>¸qÑ'AÀFÇKÁK×D[ÑD[Ñ'[Ñ"\Ó]Ñ]õô
 �N‰N˜6Ÿ;™;×+Ñ+¨QÕ/Ü˜Ô 6Ô7Ü—	‘	˜!˜f×/Ñ/×;Ñ;Ñ;Ó<ˆAÜ�M‰M˜&×+Ñ+×2Ñ2°q°b¸AÕ>Ü�M‰M˜&×+Ñ+×0Ñ0°Q°B¸!Ö<Ü˜¤§	¡	Ô*Ü× Ñ  §¡Ô/à�{‰{Ð&Ü—I‘I˜fŸm™m¨v×/AÑ/AÀF×DVÑDVÐWXÑDYÑ/YÑZÓ[�Ü—‘˜fŸk™k¨a¨R°1Ö5ð 'ð +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   )rt   Údiv©Úinput_lengthr2   Ústrides      r"   Ú_conv_out_lengthzOWavLMPreTrainedModel._get_feat_extract_output_lengths.<locals>._conv_out_length€  s"   € ô —9‘9˜\¨KÑ7¸ÈwÔWÐZ[Ñ[Ð[r#   r   )rL   rd  ÚzipÚconv_kernelÚconv_strider   Únum_adapter_layersÚadapter_stride)r   rc  rd  rm  r2   rl  r�   s          r"   Ú _get_feat_extract_output_lengthsz5WavLMPreTrainedModel._get_feat_extract_output_lengthsy  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_lengthrz   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 )NrS   r€   ©rd  r   )r±   r¶   r   )r¶   )Úcumsumrs  rµ   rt   r³   r‡   Úzerosr±   r¶   r²   ÚfliprÎ   )r   rt  rz   rd  Únon_padded_lengthsÚoutput_lengthsrG  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#   ra   )r*   r+   r,   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnrt   Úno_gradrW  rÒ   rÍ   rÎ   rs  r|  r-   r.   s   @r"   rO  rO  S  s“   ø… àÓØÐØ$€OØÐØ&*Ð#Ø ÐØ€NØÐà€U‡]�]ƒ_ó6ó ð6ñ4¸e×>NÑ>NÐQTÑ>Tð ÐcgÐjnÑcnó ð, Y]ñØ%(ðØ:?×:JÑ:J÷r#   rO  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   ©r2   rl  r£   )r   r   rW   Úin_conv_dimÚout_conv_dimr;   r<   ro  rp  Ú	conv_biasr?   r   rJ   rK   ©r   rL   Ú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 ra   )r?   rK   r&   s     r"   r(   z!WavLMNoLayerNormConvLayer.forward²  s$   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØÐr#   ©r   r)   r.   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   rW   rŠ  r‹  r;   r<   ro  rp  rŒ  r?   rV   rY   r   rJ   rK   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 )Nr?  rS   )r?   rO   rY   rK   r&   s     r"   r(   zWavLMLayerNormConvLayer.forwardÈ  sV   € ØŸ	™	 -Ó0ˆà%×/Ñ/°°BÓ7ˆØŸ™¨Ó6ˆØ%×/Ñ/°°BÓ7ˆàŸ™¨Ó6ˆØÐr#   r�  r)   r.   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)r-  Únum_channelsÚaffine)r   r   rW   rŠ  r‹  r;   r<   ro  rp  rŒ  r?   r   rJ   rK   Ú	GroupNormrY   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 ra   )r?   rY   rK   r&   s     r"   r(   zWavLMGroupNormConvLayer.forwardä  s2   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØÐr#   r�  r)   r.   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’  rm   r;   rÿ   Úconv_layersr  Ú_requires_grad)r   rL   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 ]
  } ||«      }Œ |S )NT)r¤  r¤   r§  r£  )r   rQ  r'   Ú
conv_layers       r"   r(   zWavLMFeatureEncoder.forward  sP   € Ø$¢Q¨ WÑ-ˆð ×Ò 4§=¢=Ø*.ˆMÔ'à×*Ñ*ò 	6ˆJÙ& }Ó5‰Mð	6ð Ðr#   )r*   r+   r,   rÌ   r   rª  r(   r-   r.   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   )rl  r3   )r   r   r;   r<   Úoutput_hidden_sizeÚadapter_kernel_sizerr  r?   r_   s     €r"   r   zWavLMAdapterLayer.__init__  sJ   ø€ Ü‰ÑÔÜ—I‘IØ×%Ñ%Ø�×)Ñ)Ñ)Ø×&Ñ&Ø×(Ñ(Øô
ˆ�	r#   c                 ój   — | j                  |«      }t        j                  j                  |d¬«      }|S )Nr   r€   )r?   r;   r@  Úglur&   s     r"   r(   zWavLMAdapterLayer.forward  s/   € ØŸ	™	 -Ó0ˆÜŸ™×)Ñ)¨-¸QÐ)Ó?ˆàÐr#   r)   r.   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ra   )r®  )r  r�   rL   s     €r"   r  z(WavLMAdapter.__init__.<locals>.<genexpr>.  s   øè ø€ Ò#hÀ!Ô$5°f×$=Ñ#hùs   ƒ)r   r   r°  r=   r;   rZ   ÚprojrV   Úproj_layer_normrÿ   r   rq  r  r  r_   s    `€r"   r   zWavLMAdapter.__init__$  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 rN   )r¸  r¹  rO   r  ÚnpÚrandomr¤   r  )r   r'   r  Úlayerdrop_probs       r"   r(   zWavLMAdapter.forward1  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)   r.   s   @r"   rµ  rµ  #  s   ø„ ô*ör#   rµ  r‡   Ú	mask_probÚmask_lengthrz   Ú	min_masksr}   c                 óà  ‡‡‡‡‡— | \  }Š‰dk  rt        d«      ‚‰‰kD  rt        d‰› d‰› d�«      ‚t        j                  j                  d«      j	                  «       Šˆˆˆˆˆfd„}|�-|j                  «       j                  d«      j                  «       nt        |«      D �cg c]  }‰‘Œ c}}t        j                  |‰ft        ¬	«      }	g }
 |‰«      }|d
k(  r|	S |D ]¯  } ||«      }t        j                  j                  t        j                  |‰dz
  z
  «      |d¬«      }t        |«      d
k(  r‰dz
  }n|d
   }t        j                  |t        j                  ||z
  t        j                   ¬	«      |z  g«      }|
j#                  |«       Œ± t        j$                  |
«      }
t        j&                  |
dd…dd…df   ||‰f«      }
|
j)                  ||‰z  «      }
t        j                  ‰«      dddd…f   }t        j&                  |||‰f«      j)                  ||‰z  «      }|
|z   }
|
j+                  «       ‰dz
  kD  r‰dz
  |
|
‰dz
  kD  <   t        j,                  |	|
dd«       |	S c c}w )an  
    Computes random mask spans for a given shape. Used to implement [SpecAugment: A Simple Data Augmentation Method for
    ASR](https://huggingface.co/papers/1904.08779). Note that this method is not optimized to run on TPU and should be run on
    CPU as part of the preprocessing during training.

    Args:
        shape: The shape for which to compute masks. This should be of a tuple of size 2 where
               the first element is the batch size and the second element is the length of the axis to span.
        mask_prob:  The percentage of the whole axis (between 0 and 1) which will be masked. The number of
                    independently generated mask spans of length `mask_length` is computed by
                    `mask_prob*shape[1]/mask_length`. Note that due to overlaps, `mask_prob` is an upper bound and the
                    actual percentage will be smaller.
        mask_length: size of the mask
        min_masks: minimum number of masked spans
        attention_mask: A (right-padded) attention mask which independently shortens the feature axis of
                        each batch dimension.
    r   z&`mask_length` has to be bigger than 0.zO`mask_length` has to be smaller than `sequence_length`, but got `mask_length`: z and `sequence_length`: ú`c                 óœ   •— t        ‰| z  ‰z  ‰z   «      }t        |‰«      }|‰z  ‰kD  r‰‰z  }| ‰dz
  z
  |k  rt        | ‰dz
  z
  d«      }|S )z;Given input length, compute how many spans should be maskedr   r   )rÍ   Úmax)rk  Únum_masked_spanÚepsilonr¿  r¾  rÀ  rH  s     €€€€€r"   Úcompute_num_masked_spanz6_compute_mask_indices.<locals>.compute_num_masked_spanh  so   ø€ ä˜i¨,Ñ6¸ÑDÀwÑNÓOˆÜ˜o¨yÓ9ˆð ˜[Ñ(¨?Ò:Ø-°Ñ<ˆOð ˜;¨™?Ñ+¨oÒ=Ü! ,°+À±/Ñ"BÀAÓFˆOàÐr#   NrS   r°   r   F)Úreplace)rm   r»  r¼  r  ÚitemÚdetachr‰   Útolistr   rx  rÎ   Úchoicer²   ÚlenÚconcatenateru   Úint32ÚappendÚarrayr¥   ÚreshaperÄ  Úput_along_axis)r‡   r¾  r¿  rz   rÀ  rG  rÇ  r�   rc  Úspec_aug_maskÚspec_aug_mask_idxsÚmax_num_masked_spanrk  rÅ  Úspec_aug_mask_idxÚdummy_mask_idxÚoffsetsrÆ  rH  s    `` `            @@r"   Ú_compute_mask_indicesrÚ  B  s­  ü€ ð0 #(Ñ€J�à�Q‚ÜÐAÓBÐBà�_Ò$ÜØ]Ð^iÐ]jØ& Ð&7°qð:ó
ð 	
ô �i‰i�n‰n˜QÓ×$Ñ$Ó&€G÷ð ð$ Ð%ð 	×ÑÓ×#Ñ# BÓ'×.Ñ.Ô0ä',¨ZÓ'8Ö9 !ŠoÒ9ð ô —H‘H˜j¨/Ð:Ä$ÔG€MØÐá1°/ÓBÐà˜aÒØÐà%ò 5ˆá1°,Ó?ˆô ŸI™I×,Ñ,Ü�I‰I�l k°A¡oÑ6Ó7¸ÐRWð -ó 
Ðô Ð Ó! QÒ&ð -¨qÑ0‰Nà.¨qÑ1ˆNäŸN™NØ¤§¡Ð(;¸oÑ(MÔUW×U]ÑU]Ô ^ÐaoÑ oÐpó
Ðð 	×!Ñ!Ð"3Õ4ð/5ô2 Ÿ™Ð"4Ó5Ðô Ÿ™Øš1ša ˜:Ñ&¨Ð5HÈ+Ð(VóÐð ,×3Ñ3°JÐ@SÐVaÑ@aÓbÐô �i‰i˜Ó$ T¨4² ]Ñ3€GÜ�o‰o˜g¨
Ð4GÈÐ'UÓV×^Ñ^ØÐ'¨+Ñ5ó€Gð ,¨gÑ5Ðð ×ÑÓ /°AÑ"5Ò5ØGVÐYZÑGZÐÐ-°À!Ñ0CÑCÑDô ×Ñ�mÐ%7¸¸BÔ?àÐùòw :s   Â$	I+c                   ó,  ‡ — e Zd Zdefˆ fd„Zd„ 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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   rL   rž  Úfeature_extractorrQ   Úfeature_projectionÚmask_time_probÚmask_feature_probr;   rs   rt   rÏ   r=   r[  Úmasked_spec_embedÚdo_stable_layer_normr%  Úencoderrû   rd  rµ  ÚadapterÚ	post_initr_   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                 ó8   — | j                   j                  «        y©z¨
        Calling this function will disable the gradient computation for the feature encoder so that its parameter will
        not be updated during training.
        N)rÞ  rª  ©r   s    r"   Úfreeze_feature_encoderz!WavLMModel.freeze_feature_encoderÒ  s   € ð
 	×Ñ×1Ñ1Õ3r#   Nr'   Úmask_time_indicesrz   c                 óÎ  — t        | j                  dd«      s|S |j                  «       \  }}}|�)| j                  j	                  |j
                  «      ||<   nË| j                  j                  dkD  r²| j                  r¦t        ||f| j                  j                  | j                  j                  || j                  j                  ¬«      }t        j                  ||j                  t        j                  ¬«      }| j                  j	                  |j
                  «      ||<   | j                  j                  dkD  r¨| j                  rœt        ||f| j                  j                  | j                  j                   | j                  j"                  ¬«      }t        j                  ||j                  t        j                  ¬«      }|dd…df   j%                  d|d«      }d||<   |S )	z¢
        Masks extracted features along time axis and/or along feature axis according to
        [SpecAugment](https://huggingface.co/papers/1904.08779).
        Úapply_spec_augmentTNr   )r¾  r¿  rz   rÀ  )r¶   r±   )r¾  r¿  rÀ  rS   )ÚgetattrrL   r‚   râ  rµ   r±   rà  r¤   rÚ  Úmask_time_lengthÚmask_time_min_masksrt   Útensorr¶   rÎ   rá  Úmask_feature_lengthÚmask_feature_min_masksÚexpand)r   r'   rë  rz   rG  rH  r=   Úmask_feature_indicess           r"   Ú_mask_hidden_stateszWavLMModel._mask_hidden_statesÙ  sš  € ô �t—{‘{Ð$8¸$Ô?Ø Ð ð 4A×3EÑ3EÓ3GÑ0ˆ
�O [àÐ(à/3×/EÑ/E×/HÑ/HÈ×I\ÑI\Ó/]ˆMÐ+Ò,Ø�[‰[×'Ñ'¨!Ò+°·²Ü 5Ø˜_Ð-ØŸ+™+×4Ñ4Ø ŸK™K×8Ñ8Ø-ØŸ+™+×9Ñ9ô!Ðô !&§¡Ð->À}×G[ÑG[Ôch×cmÑcmÔ nÐØ/3×/EÑ/E×/HÑ/HÈ×I\ÑI\Ó/]ˆMÐ+Ñ,à�;‰;×(Ñ(¨1Ò,°·²ä#8Ø˜[Ð)ØŸ+™+×7Ñ7Ø ŸK™K×;Ñ;ØŸ+™+×<Ñ<ô	$Ð ô $)§<¡<Ð0DÈ]×MaÑMaÔin×isÑisÔ#tÐ Ø#7º¸4¸Ñ#@×#GÑ#GÈÈOÐ]_Ó#`Ð Ø23ˆMÐ.Ñ/àÐr#   rQ  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 )
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   Frv  )rë  rz   ©rz   r|   r  r  r   )r  Úextract_featuresr'   r  )rL   r|   r  r  rÞ  rO   r|  r‡   rß  rö  rä  rå  ÚWavLMBaseModelOutputr'   r  )r   rQ  rz   rë  r|   r  r  Úkwargsrù  r'   Úencoder_outputss              r"   r(   zWavLMModel.forward  sb  € ð  2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà×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ê  rt   rÑ   rÒ   rö  r   rÏ   rÎ   rÐ   rú  r(   r-   r.   s   @r"   rÜ  rÜ  ¼  sò   ø„ ð˜{õ ò(4ð 7;Ø26ñ	,à×(Ñ(ð,ð !×,Ñ,¨tÑ3ð,ð ×(Ñ(¨4Ñ/ó	,ð\ ð /3Ø6:Ø)-Ø,0Ø#'ñ8
à—l‘l TÑ)ð8
ð Ÿ™ tÑ+ð8
ð !×,Ñ,¨tÑ3ð	8
ð
   $™;ð8
ð # T™kð8
ð ˜D‘[ð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                  «      | _        | j%                  «        y)a/  
        target_lang (`str`, *optional*):
            Language id of adapter weights. Adapter weights are stored in the format adapter.<lang>.safetensors or
            adapter.<lang>.bin. Only relevant when using an instance of [`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.rd  )r   r   rÜ  rP  r;   r\   Úfinal_dropoutr^   r  Ú
vocab_sizerm   r!   rA   rd  r°  r=   rZ   Úlm_headræ  )r   rL   r  r°  r!   s       €r"   r   zWavLMForCTC.__init__L  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                 ó8  — t        «       t        j                  d«      k(  ry| j                  }|�&t	        | j
                  dd«      €t        d|› d�«      ‚|€-t	        | j
                  dd«      �t        j                  d«       y|�| j                  |d¬«       yy)	a'  
        This method overwrites [`~PreTrainedModel.tie_weights`] so that adapter weights can be correctly loaded when
        passing `target_lang=...` to `from_pretrained(...)`.

        This method is **not** supposed to be called by the user and is prone to be changed in the future.
        ÚmetaNÚadapter_attn_dimzCannot pass `target_lang`: z- if `config.adapter_attn_dim` is not defined.z)By default `target_lang` is set to 'eng'.T)Ú
force_load)
r   rt   r¶   r  rî  rL   rm   ÚloggerÚinfoÚload_adapter)r   rû  r  s      r"   Útie_weightszWavLMForCTC.tie_weightsi  sœ   € ô 6Ó7¼5¿<¹<ÈÓ;OÒOØð ×&Ñ&ˆàÐ"¤w¨t¯{©{Ð<NÐPTÓ'UÐ']ÜÐ:¸;¸-ÐGtÐuÓvÐvØÐ ¤W¨T¯[©[Ð:LÈdÓ%SÐ%_Ü�K‰KÐCÕDØÐ$Ø×Ñ˜k°dÐÕ;ð %r#   c                 óL   — | j                   j                  j                  «        yrè  ©rP  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©rP  r¦  r§  r¨  s     r"   Úfreeze_base_modelzWavLMForCTC.freeze_base_modelˆ  ó(   € ð
 —Z‘Z×*Ñ*Ó,ò 	(ˆEØ"'ˆEÕñ	(r#   rQ  rz   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°   rS   )r9   r±   r   F)Úenabled)ÚblankÚ	reductionÚzero_infinity©ÚlossÚlogitsr'   r  )rL   r  rÄ  r  rm   rP  r^   r  rt   Ú	ones_liker³   rs  r‰   rµ   Úmasked_selectr;   r@  Úlog_softmaxÚfloat32rO   ÚbackendsÚcudnnÚflagsÚctc_lossÚpad_token_idÚctc_loss_reductionÚctc_zero_infinityÚ_HIDDEN_STATES_START_POSITIONr   r'   r  )r   rQ  rz   r|   r  r  r  rû  ró   r'   r  r  rc  Úlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probsÚoutputs                     r"   r(   zWavLMForCTC.forward�  s'  € ð$ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ &§*¡*£,°$·+±+×2HÑ2HÒ"HÜÐCÀDÇKÁK×DZÑDZÐC[Ð\Ó]Ð]à—*‘*ØØ)Ø/Ø!5Ø#ð ó 
ˆð   ™
ˆØŸ™ ]Ó3ˆà—‘˜mÓ,ˆàˆØÑð #1Ð"<‘Ä%Ç/Á/ÐR^Ôfk×fpÑfpÔBqð ð !×AÑAÀ.×BTÑBTÐUWÓBXÓY×\Ñ\Ô]b×]gÑ]gÓhˆMð ! A™+ˆKØ(Ÿ_™_¨RÓ0ˆNØ &× 4Ñ 4°[Ó AÐô Ÿ™×1Ñ1°&¸bÌÏÉÐ1ÓV×`Ñ`ÐabÐdeÓfˆIä—‘×%Ñ%×+Ñ+°EÐ+Ó:ñ 	Ü—}‘}×-Ñ-ØØ%Ø!Ø"ØŸ+™+×2Ñ2Ø"Ÿk™k×<Ñ<Ø"&§+¡+×"?Ñ"?ð .ó �÷	ñ Ø�Y Ô)FÐ)GÐ!HÑHˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØ˜f°G×4IÑ4IÐV]×VhÑVhô
ð 	
÷	ð 	ús   ÆA#IÉIra   rý  )r*   r+   r,   rÝ   r   r  rê  r  r   rt   rÏ   rÎ   rÐ   r   r(   r-   r.   s   @r"   r   r   F  sÀ   ø„ ñ¨C°$©Jõ ò:<ò0:ò(ð ð /3Ø)-Ø,0Ø#'Ø&*ñE
à—l‘l TÑ)ðE
ð Ÿ™ tÑ+ðE
ð   $™;ð	E
ð
 # T™kðE
ð ˜D‘[ðE
ð —‘˜tÑ#ð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                  r0t        j                  t        j                  |«      |z  «      | _        t        j                  |j                  |j                   «      | _        t        j                  |j                   |j$                  «      | _        | j)                  «        y )Nrd  z\Sequence classification does not support the use of WavLM adapters (config.add_adapter=True)r   )r   r   rA   rd  rm   rÜ  rP  r  Úuse_weighted_layer_sumr;   rs   rt   ru   Ú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ˆ
Ø×(Ò(Ü!#§¡¬e¯j©j¸Ó.DÀzÑ.QÓ!RˆDÔÜŸ™ 6×#5Ñ#5°v×7RÑ7RÓSˆŒÜŸ)™) F×$?Ñ$?À×ARÑARÓSˆŒð 	�‰Õ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#   NrQ  rz   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 )á	  
        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   rÊ   r  )rL   r  r3  rP  r*  rt   Ústackr;   r@  rC  r4  r†   r‰   r6  r5  r|  r‡   r„   r…   r8  r   r7  r   r'   r  )r   rQ  rz   r|   r  r  r  rû  ró   r'   Únorm_weightsÚpooled_outputÚpadding_maskÚexpand_padding_maskr  r  Úloss_fctr/  s                     r"   r(   z&WavLMForSequenceClassification.forward   s  € ð0 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØ'+§{¡{×'IÒ'I™tÐOcÐà—*‘*ØØ)Ø/Ø!5Ø#ð ó 
ˆð �;‰;×-Ò-Ø#Ô$AÑBˆMÜ!ŸK™K¨¸1Ô=ˆMÜŸ=™=×0Ñ0°×1CÑ1CÈÐ0ÓLˆLØ*¨\×->Ñ->¸rÀ1ÀaÓ-HÑH×MÑMÐRSÐMÓT‰Mà# A™JˆMàŸ™ }Ó5ˆØÐ!Ø)×.Ñ.°1Ð.Ó5‰Mà×BÑBÀ=×CVÑCVÐWXÑCYÐ[iÓjˆLØ".×"8Ñ"8¸Ó"<×"CÑ"CÀAÀqÈ-×J]ÑJ]Ð^_ÑJ`Ó"aÐØ25ˆMÐ.Ð.Ñ/Ø)×-Ñ-°!Ð-Ó4°|×7GÑ7GÈAÐ7GÓ7N×7SÑ7SÐTVÐXYÓ7ZÑZˆMà—‘ Ó/ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯K©K×,BÑ,BÓCÀVÇ[Á[ÐQSÃ_ÓUˆDáØ�Y Ô)FÐ)GÐ!HÑHˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r#   rý  )r*   r+   r,   r   rê  r  r   rt   rÏ   rÎ   rÐ   r   r(   r-   r.   s   @r"   r1  r1  Ù  s±   ø„ ôò":ò(ð ð /3Ø)-Ø,0Ø#'Ø&*ñC
à—l‘l TÑ)ðC
ð Ÿ™ tÑ+ðC
ð   $™;ð	C
ð
 # T™kðC
ð ˜D‘[ðC
ð —‘˜tÑ#ðC
ð 
Ð)Ñ	)òC
ó ôC
r#   r1  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                  r0t        j                  t        j                  |«      |z  «      | _        t        j                  |j                  |j                   «      | _        |j                   | _        | j%                  «        y )Nrd  z_Audio frame classification does not support the use of WavLM adapters (config.add_adapter=True)r   )r   r   rA   rd  rm   rÜ  rP  r  r3  r;   rs   rt   ru   r4  rZ   r=   r7  r8  ræ  r9  s      €r"   r   z)WavLMForAudioFrameClassification.__init__I  s­   ø€ Ü‰Ñ˜Ô ä�6˜=Ô)¨f×.@Ò.@ÜØqóð ô   Ó'ˆŒ
Ø×-Ñ-°Ñ1ˆ
Ø×(Ò(Ü!#§¡¬e¯j©j¸Ó.DÀzÑ.QÓ!RˆDÔÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒØ ×+Ñ+ˆŒà�‰Õr#   c                 óL   — | j                   j                  j                  «        yrè  r  ré  s    r"   rê  z7WavLMForAudioFrameClassification.freeze_feature_encoderY  r  r#   c                 óP   — | j                   j                  «       D ]	  }d|_        Œ yr  r  r¨  s     r"   r  z2WavLMForAudioFrameClassification.freeze_base_model`  r  r#   NrQ  rz   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 )
r>  NTrø  r   r€   rS   r   )Úaxisr  )rL   r  r3  rP  r*  rt   r?  r;   r@  rC  r4  r†   r‰   r8  r   r7  rD  r   r'   r  )r   rQ  rz   r  r|   r  r  rû  ró   r'   r@  r  r  rD  r/  s                  r"   r(   z(WavLMForAudioFrameClassification.forwardh  sh  € ð0 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØ'+§{¡{×'IÒ'I™tÐOcÐà—*‘*ØØ)Ø/Ø!5Ø#ð ó 
ˆð �;‰;×-Ò-Ø#Ô$AÑBˆMÜ!ŸK™K¨¸1Ô=ˆMÜŸ=™=×0Ñ0°×1CÑ1CÈÐ0ÓLˆLØ*¨\×->Ñ->¸rÀ1ÀaÓ-HÑH×MÑMÐRSÐMÓT‰Mà# A™JˆMà—‘ Ó/ˆàˆØÐÜ'Ó)ˆ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   rt   rÏ   rÎ   rÐ   r   r(   r-   r.   s   @r"   rF  rF  G  s¨   ø„ ôò :ò(ð ð /3Ø&*Ø)-Ø,0Ø#'ñ:
à—l‘l TÑ)ð:
ð Ÿ™ tÑ+ð:
ð —‘˜tÑ#ð	:
ð
   $™;ð:
ð # T™kð:
ð ˜D‘[ð:
ð 
Ð&Ñ	&ò:
ó ô:
r#   rF  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚAMSoftmaxLossc                 óÞ   •— t         ‰| �  «        || _        || _        || _        t        j                  t        j                  ||«      d¬«      | _	        t        j                  «       | _        y )NT)r§  )r   r   ÚscaleÚmarginr7  r;   rs   rt   Úrandnr7   r   r  )r   Ú	input_dimr7  rO  rP  r!   s        €r"   r   zAMSoftmaxLoss.__init__§  sQ   ø€ Ü‰ÑÔØˆŒ
ØˆŒØ$ˆŒÜ—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;   r@  Ú	normalizer7   rt   ÚmmrP  Úone_hotr7  rO  rÄ   rÎ   r  )	r   r'   r  r7   Ú	cos_thetaÚpsiÚonehotr  r  s	            r"   r(   zAMSoftmaxLoss.forward¯  s²   € Ø—‘Ó!ˆÜ—‘×(Ñ(¨¯©¸!Ð(Ó<ˆÜŸ™×/Ñ/°À1Ð/ÓEˆÜ—H‘H˜]¨FÓ3ˆ	Ø˜$Ÿ+™+Ñ%ˆä—‘×&Ñ& v¨t¯©Ó?ˆØ—‘œeŸk™k¨&¯+©+«-¸¸iÓHÑHˆØ�y‰y˜ Ó(ˆàˆr#   )g      >@gš™™™™™Ù?r)   r.   s   @r"   rM  rM  ¦  s   ø„ õ*ör#   rM  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_kernelr2   Útdnn_dilationÚdilationr;   rZ   ÚkernelÚReLUrK   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   )ra  )r   Úpeft.tuners.lorare  rÛ   rb  ÚwarningsÚwarnrO   r7   r†   r‹  r2   rŠ  r;   r@  Úconv1dr£   ra  rK   )r   r'   re  r7   s       r"   r(   zTDNNLayer.forwardÈ  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   rt   rÏ   r(   r-   r.   s   @r"   r\  r\  ½  s#   ø„ õ$ð U§\¡\ð °e·l±l÷ r#   r\  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
                  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   rS   r   )r   r   rÜ  rP  r  r3  r;   rs   rt   ru   r4  rZ   r=   r^  r6  r   rÍ  r\  rÿ   ÚtdnnÚxvector_output_dimrÞ  r8  rM  r7  Ú	objectiveræ  )r   rL   r:  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                 ó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#   rc  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  rj  s      r"   rm  zBWavLMForXVector._get_tdnn_output_lengths.<locals>._conv_out_length
  s   € ð ! ;Ñ.°6Ñ9¸AÑ=Ð=r#   r   )rL   r_  )r   rc  rm  r2   s       r"   Ú_get_tdnn_output_lengthsz(WavLMForXVector._get_tdnn_output_lengths  s:   € ò
	>ð
  Ÿ;™;×2Ñ2ò 	LˆKÙ,¨]¸KÈÓK‰Mð	Lð Ðr#   NrQ  rz   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 )	r>  NTrø  r   r€   rS   r   )r  r  Ú
embeddingsr'   r  )rL   r  r3  rP  r*  rt   r?  r;   r@  rC  r4  r†   r‰   r6  rm  r5  rT  rs  ru  r  rÐ  r¢   rÞ  r8  ro  r   r'   r  )r   rQ  rz   r|   r  r  r  rû  ró   r'   r@  Ú
tdnn_layerÚmean_featuresÚstd_featuresÚfeat_extract_output_lengthsÚtdnn_output_lengthsr  ÚlengthÚstatistic_poolingÚoutput_embeddingsr  r  r/  s                          r"   r(   zWavLMForXVector.forward  s™  € ð0 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØ'+§{¡{×'IÒ'I™tÐOcÐà—*‘*ØØ)Ø/Ø!5Ø#ð ó 
ˆð �;‰;×-Ò-Ø#Ô$AÑBˆMÜ!ŸK™K¨¸1Ô=ˆMÜŸ=™=×0Ñ0°×1CÑ1CÈÐ0ÓLˆLØ*¨\×->Ñ->¸rÀ1ÀaÓ-HÑH×MÑMÐRSÐMÓT‰Mà# A™JˆMàŸ™ }Ó5ˆàŸ)™)ò 	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  rt   rÒ   rÍ   ru  r   rÏ   rÎ   rÐ   r   r(   r-   r.   s   @r"   rk  rk  Ý  sÇ   ø„ ôò&:ò(ð°e×6FÑ6FÈÑ6Ló ð ð /3Ø)-Ø,0Ø#'Ø&*ñP
à—l‘l TÑ)ðP
ð Ÿ™ tÑ+ðP
ð   $™;ð	P
ð
 # T™kðP
ð ˜D‘[ðP
ð —‘˜tÑ#ðP
ð 
�Ñ	òP
ó ôP
r#   rk  )rF  r   r1  rk  rÜ  rO  r%   )KrÁ   rg  Únumpyr»  rt   Útorch.nnr;   Útorch.nn.functionalr@  rŸ   r   Ú r   rX  Ú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*  rO  r‡  r’  r—  rž  r®  rµ  rÐ   rÍ   rÀ   rÒ   ÚndarrayrÚ  rú  rÜ  r*  r   r1  rF  rM  r\  rk  Ú__all__r  r#   r"   ú<module>r�     sÖ  ðó Û ã Û Ý ß Ð Ý %å &Ý !Ý @Ý 7Ý 9÷÷ ÷ Zß ?Ñ ?Ý ,ð 
ˆ×	Ñ	˜HÓ	%€ô˜Ÿ	™	ô ô* 2§9¡9ô *ôZ1˜RŸY™Yô 1ôc �R—Y‘Yô c ôL�r—y‘yô ô0&Ð2ô &ôR"Ð'Aô "ôJG
�2—9‘9ô G
ôTH
 "§)¡)ô H
ôVC' §¡ô C'ðL ôL˜?ó Ló ðLô^Ð :ô ô*Ð8ô ô6Ð8ô ô0#˜"Ÿ)™)ô #ôL˜Ÿ	™	ô ô$�2—9‘9ô ðF /3ØñtØ��c�‰?ðtàðtð ðtð ×$Ñ$ tÑ+ð	tð
 ðtð ‡Z�Zótðn /Ð ð ôC
Ð%ó C
ó ðC
ðL !"Ð ñ ðôô
K
Ð&ó K
óð
K
ñ\ ðôôe
Ð%9ó e
óðe
ðP ô[
Ð';ó [
ó ð[
ô|�B—I‘Iô ô.�—	‘	ô ñ@ ðôô
C
Ð*ó C
óð
C
òL�r#   