ó
    ‡Ž¡jg! ã                   óä  • S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	r	SSK
Js  Jr  SSK	Jr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJrJr  SSKJrJr  SSKJr  SSKJ r   SSK!J"r"J#r#J$r$J%r%J&r&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-J.r.J/r/  \&R`                  " \15      r2S r3S r4S r5S\	Rl                  S\	Rl                  4S jr7\$" SS9\ " S S\"5      5       5       r8\$" SS9\ " S  S!\"5      5       5       r9\$\ " S" S#\"5      5       5       r: " S$ S%\Rv                  5      r< " S& S'\Rv                  5      r= " S( S)\Rv                  5      r> " S* S+\Rv                  5      r? " S, S-\Rv                  5      r@ " S. S/\Rv                  5      rA " S0 S1\Rv                  5      rB " S2 S3\Rv                  5      rC " S4 S5\Rv                  5      rD " S6 S7\5      rE " S8 S9\Rv                  5      rF " S: S;\Rv                  5      rG " S< S=\Rv                  5      rH " S> S?\Rv                  5      rI SfS@\Rv                  SA\	Rl                  SB\	Rl                  SC\	Rl                  SD\	Rl                  S-  SE\JSF\J4SG jjrK " SH SI\Rv                  5      rL " SJ SK\Rv                  5      rM " SL SM\Rv                  5      rN " SN SO\Rv                  5      rO " SP SQ\Rv                  5      rP " SR SS\5      rQ " ST SU\Rv                  5      rR " SV SW\Rv                  5      rS\$ " SX SY\5      5       rT " SZ S[\T5      rU\$" S\S9 " S] S^\T5      5       rV\$ " S_ S`\T5      5       rW\$ " Sa Sb\T5      5       rX\$ " Sc Sd\T5      5       rY/ SeQrZg)gzPyTorch CLAP model.é    N)ÚCallable)Ú	dataclass)ÚAny)Únné   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚClapAudioConfigÚ
ClapConfigÚClapTextConfigc                 ó�   • U R                   u  p#nU SS2SS2SSS24   R                  SSUS5      nUR                  X#U-  U5      nU$ )aI  
Interpolate data in time domain. This is used to compensate the resolution reduction in downsampling of a CNN.

Args:
    hidden_states (`torch.FloatTensor` of shape (batch_size, time_length, classes_num)):
        Input hidden states
    ratio (`int`):
        The ratio of the length of the output to the length of the input.
Nr   )ÚshapeÚrepeatÚreshape)Úhidden_statesÚratioÚ
batch_sizeÚtime_lengthÚclasses_numÚ	upsampleds         Ú´C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/clap/modeling_clap.pyÚinterpolater)   /   sT   € ð .;×-@Ñ-@Ñ*€Z˜kØša¢ Dª!˜mÑ,×3Ñ3°A°q¸%ÀÓC€IØ×!Ñ! *¸EÑ.AÀ;ÓO€IØÐó    c                 óÀ   • U R                   u  p#pEU R                  X#U-  XU-  X5      n U R                  SSSSSS5      R                  5       R                  SXU5      nU$ )a2  
Returns the resized hidden states. The output shape should be `(batch_size * num_windows, window_size, window_size,
num_channels)`

Args:
    hidden_states (`torch.FloatTensor` of shape `(batch_size, height, width, num_channels)`):
        Input hidden states
    window_size (`int`):
        Window size
r   r   r   é   é   é   éÿÿÿÿ©r   ÚviewÚpermuteÚ
contiguous)r"   Úwindow_sizer$   ÚheightÚwidthÚnum_channelsÚwindowss          r(   Úwindow_partitionr9   @   so   € ð /<×.AÑ.AÑ+€J˜à!×&Ñ&Ø˜kÑ)¨;ÀÑ8LÈkó€Mð ×#Ñ# A q¨!¨Q°°1Ó5×@Ñ@ÓB×GÑGÈÈKÐfrÓs€GØ€Nr*   c                 óÀ   • U R                   S   nU R                  SX!-  X1-  XU5      n U R                  SSSSSS5      R                  5       R                  SX#U5      n U $ )a_  
Merges windows to produce higher resolution features.
Args:
    windows (`torch.FloatTensor` of shape `(num_windows * batch_size, window_size, window_size, num_channels)`):
        Input windows
    window_size (`int`):
        Window size
    height (`int`):
        Height of the resized audio
    width (`int`):
        Width of the resized audio
r/   r   r   r   r,   r-   r.   r0   )r8   r4   r5   r6   r7   s        r(   Úwindow_reverser;   U   se   € ð —=‘= Ñ$€LØ�l‰l˜2˜vÑ4°eÑ6JÈKÐfrÓs€GØ�o‰o˜a  A q¨!¨QÓ/×:Ñ:Ó<×AÑAÀ"ÀfÐUaÓb€GØ€Nr*   ÚlogitsÚreturnc                 ó�   • [         R                  " [        U 5      U R                  S9n[        R
                  R                  X5      $ )N©Údevice)ÚtorchÚarangeÚlenr@   r   Ú
functionalÚcross_entropy)r<   Úlabelss     r(   Úcontrastive_lossrG   j   s/   € Ü�\Š\œ#˜f›+¨f¯m©mÑ<€FÜ�=‰=×&Ñ& vÓ6Ð6r*   ze
    Base class for text model's outputs that also contains a pooling of the last hidden states.
    )Úcustom_introc                   óÎ   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\\R                  S4   S-  \S'   Sr\\R                  S4   S-  \S'   S	rg)
ÚClapTextModelOutputéo   zê
text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`):
    The text embeddings obtained by applying the projection layer to the pooler_output.
NÚtext_embedsÚlast_hidden_state.r"   Ú
attentions© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rL   rA   ÚFloatTensorÚ__annotations__rM   r"   ÚtuplerN   Ú__static_attributes__rO   r*   r(   rJ   rJ   o   sr   ‡ ñð
 -1€K�×"Ñ" TÑ)Ó0Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ö;r*   rJ   zT
    ClapAudio model output to mimic the output of the original implementation.
    c                   óÎ   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\\R                  S4   S-  \S'   Sr\\R                  S4   S-  \S'   S	rg)
ÚClapAudioModelOutputé‚   z£
audio_embeds (`torch.FloatTensor` of shape `(batch_size, hidden_size)`):
    The Audio embeddings obtained by applying the projection layer to the pooler_output.
NÚaudio_embedsrM   .r"   rN   rO   )rP   rQ   rR   rS   rT   r\   rA   rU   rV   rM   r"   rW   rN   rX   rO   r*   r(   rZ   rZ   ‚   sr   ‡ ñð
 .2€L�%×#Ñ# dÑ*Ó1Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ö;r*   rZ   c                   ó  • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\R                  S-  \S'   Sr\R                  S-  \S'   Sr\R                  S-  \S'   Sr\\S	'   Sr\\S
'   S\\   4S jrSrg)Ú
ClapOutputé”   ab  
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
    Contrastive loss for audio-text similarity.
logits_per_audio (`torch.FloatTensor` of shape `(audio_batch_size, text_batch_size)`):
    The scaled dot product scores between `audio_embeds` and `text_embeds`. This represents the audio-text
    similarity scores.
logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, audio_batch_size)`):
    The scaled dot product scores between `text_embeds` and `audio_embeds`. This represents the text-audio
    similarity scores.
text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
    The text embeddings obtained by applying the projection layer to the pooled output of [`ClapTextModel`].
audio_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
    The audio embeddings obtained by applying the projection layer to the pooled output of [`ClapAudioModel`].
text_model_output (`BaseModelOutputWithPooling`):
    The output of the [`ClapTextModel`].
audio_model_output (`BaseModelOutputWithPooling`):
    The output of the [`ClapAudioModel`].
NÚlossÚlogits_per_audioÚlogits_per_textrL   r\   Útext_model_outputÚaudio_model_outputr=   c                 óB   • [        S U R                  5        5       5      $ )Nc              3   óp   #   • U  H,  n[        U[        5      (       a  UR                  5       OUv •  M.     g 7f©N)Ú
isinstancer   Úto_tuple)Ú.0Úvs     r(   Ú	<genexpr>Ú&ClapOutput.to_tuple.<locals>.<genexpr>´   s)   é € Ð^ÒP]È1¤Z°´;×%?Ñ%?�Q—Z‘Z”\ÀQÔFÒP]ùs   ‚46)rW   Úvalues©Úselfs    r(   ri   ÚClapOutput.to_tuple³   s   € ÜÑ^ÐPT×P[ÑP[ÔP]Ó^Ó^Ð^r*   rO   )rP   rQ   rR   rS   rT   r`   rA   rU   rV   ra   rb   rL   r\   rc   r   rd   rW   r   ri   rX   rO   r*   r(   r^   r^   ”   s�   ‡ ñð& &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø15Ð�e×'Ñ'¨$Ñ.Ó5Ø04€O�U×&Ñ&¨Ñ-Ó4Ø,0€K�×"Ñ" TÑ)Ó0Ø-1€L�%×#Ñ# dÑ*Ó1Ø48ÐÐ1Ó8Ø59ÐÐ2Ó9ð_˜% ™*÷ _r*   r^   c                   ó:   ^ • \ rS rSrSrS\4U 4S jjrS rSrU =r	$ )ÚClapAudioAFFBlocké¸   zƒ
ATTENTIONAL FEATURE FUSION Block from CLAP, since in CLAP we are always in 2D mode, it is not needed to implement
the 1D version.
Úconfigc                 óÖ  >• [         TU ]  5         UR                  nUR                  n[	        X#-  5      n[
        R                  " [
        R                  " X$SSSS9[
        R                  " U5      [
        R                  " SS9[
        R                  " XBSSSS9[
        R                  " U5      5      U l
        [
        R                  " [
        R                  " S5      [
        R                  " X$SSSS9[
        R                  " U5      [
        R                  " SS9[
        R                  " XBSSSS9[
        R                  " U5      5      U l        [
        R                  " 5       U l        g )Nr   r   ©Úkernel_sizeÚstrideÚpaddingT)Úinplace)ÚsuperÚ__init__Úpatch_embeds_hidden_sizeÚaff_block_rÚintr   Ú
SequentialÚConv2dÚBatchNorm2dÚReLUÚ	local_attÚAdaptiveAvgPool2dÚ
global_attÚSigmoidÚsigmoid)rp   ru   ÚchannelsÚdownsize_ratioÚinter_channelsÚ	__class__s        €r(   r}   ÚClapAudioAFFBlock.__init__¾   s  ø€ Ü‰ÑÔØ×2Ñ2ˆØ×+Ñ+ˆÜ˜XÑ7Ó8ˆäŸšÜ�IŠI�h¸AÀaÐQRÑSÜ�NŠN˜>Ó*Ü�GŠG˜DÑ!Ü�IŠI�n¸AÀaÐQRÑSÜ�NŠN˜8Ó$ó
ˆŒô Ÿ-š-Ü× Ò  Ó#Ü�IŠI�h¸AÀaÐQRÑSÜ�NŠN˜>Ó*Ü�GŠG˜DÑ!Ü�IŠI�n¸AÀaÐQRÑSÜ�NŠN˜8Ó$ó
ˆŒô —z’z“|ˆ�r*   c                 óž   • X-   nU R                  U5      U R                  U5      -   nU R                  U5      nSU-  U-  SU-  SU-
  -  -   nU$ )Nr,   r   )r…   r‡   r‰   )rp   r"   ÚresidualÚattention_inputÚfused_layer_outputÚoutputs         r(   ÚforwardÚClapAudioAFFBlock.forwardÖ   s`   € Ø'Ñ2ˆà!Ÿ^™^¨OÓ<¸t¿¹ÈÓ?_Ñ_ÐØ!Ÿ\™\Ð*<Ó=Ðà�]Ñ"Ð%7Ñ7¸!¸h¹,È!ÐN`ÑJ`Ñ:aÑaˆØˆr*   )r‡   r…   r‰   ©
rP   rQ   rR   rS   rT   r   r}   r”   rX   Ú__classcell__©r�   s   @r(   rs   rs   ¸   s   ø† ñð
$˜÷ $÷0ð r*   rs   c                   ó>   ^ • \ rS rSrSrS\4U 4S jjrSS jrSrU =r	$ )ÚClapAudioPatchEmbedéà   z~
This module converts the hidden states reshaped as an image to patch embeddings ready to be passed to the
Transformer block.
ru   c                 óà  >• [         TU ]  5         [        UR                  [        5      (       a  UR                  UR                  4OUR                  n[        UR
                  [        5      (       a  UR
                  UR
                  4OUR
                  n[        UR                  [        5      (       a  UR                  UR                  4OUR                  nX l        X@l        US   US   -  US   US   -  4U l        U R                  S   U R                  S   -  U l	        UR                  U l        UR                  U l        US   US   -
  S-  US   US   -
  S-  4nU R                  (       a  UR                  S:X  a  SOSn[        R                  " UR                   U-  UR"                  UUUS9U l        UR&                  (       a   [        R(                  " UR"                  5      O[        R*                  " 5       U l        U R                  (       aX  [/        U5      U l        [        R                  " UR                   UR"                  US   US   S-  4US   US   S-  4US9U l        g g )Nr   r   r,   Úchannel_mapr-   rw   r   )r|   r}   rh   Ú	spec_sizer€   Ú
patch_sizeÚpatch_strideÚimg_sizeÚ	grid_sizeÚnum_patchesÚflatten_patch_embedsÚflattenÚenable_fusionÚfusion_typer   r‚   Úpatch_embed_input_channelsr~   ÚprojÚenable_patch_layer_normÚ	LayerNormÚIdentityÚnormrs   Úfusion_modelÚ
mel_conv2d)rp   ru   r¡   rŸ   r    rz   Úscale_factorr�   s          €r(   r}   ÚClapAudioPatchEmbed.__init__æ   s0  ø€ Ü‰ÑÔÜ;EÀf×FVÑFVÔX[×;\Ñ;\�F×$Ñ$ f×&6Ñ&6Ñ7Ðbh×brÑbrˆä6@À×ARÑARÔTW×6XÑ6XˆV×Ñ × 1Ñ 1Ñ2Ð^d×^oÑ^oð 	ô ;EÀV×EXÑEXÔZ]×:^Ñ:^ˆV× Ñ  &×"5Ñ"5Ñ6Ðdj×dwÑdwð 	ð !ŒØ(Ôà" 1™+¨°a©Ñ8¸(À1¹+ÈÐVWÉÑ:XÐYˆŒØŸ>™>¨!Ñ,¨t¯~©~¸aÑ/@Ñ@ˆÔà×2Ñ2ˆŒØ#×1Ñ1ˆÔà˜q‘M L°¡OÑ3¸Ñ9¸JÀq¹MÈLÐYZÉOÑ<[Ð`aÑ;aÐbˆà ×.×.°6×3EÑ3EÈÓ3V‘qÐ\]ˆä—I’IØ×-Ñ-°Ñ<Ø×+Ñ+Ø"ØØñ
ˆŒ	ð FL×Ec×Ec”B—L’L ×!@Ñ!@ÔAÔik×itÒitÓivˆŒ	Ø××Ü 1°&Ó 9ˆDÔÜ ŸišiØ×1Ñ1Ø×/Ñ/Ø'¨™]¨J°q©M¸AÑ,=Ð>Ø$ Q™¨°a©¸1Ñ)<Ð=ØñˆD�Oð r*   c                 óâ  • U R                   (       Ga¢  US S 2SS2S S 2S S 24   nUR                  u  pEpgX`R                  S   :w  d  XpR                  S   :w  a2  [        SU SU SU R                  S    SU R                  S    S3	5      eU R	                  U5      nUR                  S5      n[        U5      S:”  aø  XSS 2S S 2S S 24   R                  5       n	U	R                  u  pEpgU	R                  XE-  SXg5      n	U R                  U	5      n	U	R                  u  p«pgU	R                  XEX¶U5      n	U	R                  S5      R                  5       R                  S	5      n	U	R                  S5      n[        R                  R                  R                  U	SXŒ-
  4S
S5      n	U R!                  X2   U	5      X2'   UnOwUR                  u    p¦nX`R                  S   :w  d  XpR                  S   :w  a2  [        SU SU SU R                  S    SU R                  S    S3	5      eU R	                  U5      nU R                  (       a!  UR                  S5      R#                  SS5      nU R%                  U5      nU$ )Nr   r   zInput audio size (Ú*z) doesn't match model (z).r/   )r   r,   r   r   r-   r   Úconstantr,   )r¦   r   r¡   Ú
ValueErrorr©   ÚsizerC   r3   r1   r¯   r2   r¥   rA   r   rD   Úpadr®   Ú	transposer­   )rp   r"   Úis_longer_idxÚglobal_hidden_statesr$   r7   r5   r6   Úoutput_widthÚlocal_hidden_statesÚ_ÚfeaturesÚlocal_widths                r(   r”   ÚClapAudioPatchEmbed.forward  s–  € Ø××Ðà#0²°A°a°CººA°Ñ#>Ð ð 7K×6PÑ6PÑ3ˆJ fàŸ™ qÑ)Ó)¨U·m±mÀAÑ6FÓ-FÜ Ø(¨¨°°%°Ð8OÐPT×P]ÑP]Ð^_ÑP`ÐOaÐabÐcg×cpÑcpÐqrÑcsÐbtÐtvÐwóð ð $(§9¡9Ð-AÓ#BÐ Ø/×4Ñ4°RÓ8ˆLÜ�=Ó! AÓ%à&3À1Á2ÂqÊ!Ð4KÑ&L×&WÑ&WÓ&YÐ#Ø:M×:SÑ:SÑ7�
¨&Ø&9×&>Ñ&>¸zÑ?XÐZ[Ð]cÓ&kÐ#à&*§o¡oÐ6IÓ&JÐ#à-@×-FÑ-FÑ*�˜VØ&9×&>Ñ&>¸zÐYaÐkpÓ&qÐ#Ø&9×&AÑ&AÀ/Ó&R×&]Ñ&]Ó&_×&gÑ&gÐhiÓ&jÐ#à1×6Ñ6°rÓ:�Ü&+§h¡h×&9Ñ&9×&=Ñ&=Ø'¨!¨\Ñ-GÐ)HÈ*ÐVWó'Ð#ð 7;×6GÑ6GØ(Ñ7Ð9Ló7Ð$Ñ3ð 1‰Mà"/×"5Ñ"5ÑˆAˆq˜%ØŸ™ qÑ)Ó)¨U·m±mÀAÑ6FÓ-FÜ Ø(¨¨°°%°Ð8OÐPT×P]ÑP]Ð^_ÑP`ÐOaÐabÐcg×cpÑcpÐqrÑcsÐbtÐtvÐwóð ð !ŸI™I mÓ4ˆMà�<�<Ø)×1Ñ1°!Ó4×>Ñ>¸qÀ!ÓDˆMØŸ	™	 -Ó0ˆØÐr*   )
r¦   r¥   r®   r¢   r¡   r¯   r­   r£   r    r©   rg   r–   r˜   s   @r(   rš   rš   à   s   ø† ñð
(˜÷ (÷T/ò /r*   rš   c            
       óž   ^ • \ rS rSrU 4S jr  SS\R                  S\R                  S-  S\S-  S\	\R                     4S jjr
S	 rS
rU =r$ )ÚClapAudioSelfAttentioniC  c                 óÌ  >• [         TU ]  5         X#-  S:w  a  [        SU SU S35      eX0l        [	        X#-  5      U l        U R                  U R
                  -  U l        [        U[        R                  R                  5      (       a  UOXD4U l        [        R                  " [        R                  " SU R                  S   -  S-
  SU R                  S   -  S-
  -  U5      5      U l        [        R"                  " U R%                  5       5      U l        [        R(                  " U R                  U R                  UR*                  S9U l        [        R(                  " U R                  U R                  UR*                  S9U l        [        R(                  " U R                  U R                  UR*                  S9U l        [        R2                  " UR4                  5      U l        g )Nr   úThe hidden size (ú6) is not a multiple of the number of attention heads (Ú)r,   r   ©Úbias)r|   r}   rµ   Únum_attention_headsr€   Úattention_head_sizeÚall_head_sizerh   ÚcollectionsÚabcÚIterabler4   r   Ú	ParameterrA   ÚzerosÚrelative_position_bias_tableÚBufferÚcreate_relative_position_indexÚrelative_position_indexÚLinearÚqkv_biasÚqueryÚkeyÚvalueÚDropoutÚattention_probs_dropout_probÚdropout©rp   ru   ÚdimÚ	num_headsr4   r�   s        €r(   r}   ÚClapAudioSelfAttention.__init__D  s‚  ø€ Ü‰ÑÔØ‰?˜aÓÜØ# C 5Ð(^Ð_hÐ^iÐijÐkóð ð $-Ô Ü#& s¡Ó#7ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä% k´;·?±?×3KÑ3K×LÑL‰KÐS^ÐRlð 	Ôô -/¯LªLÜ�KŠK˜˜T×-Ñ-¨aÑ0Ñ0°1Ñ4¸¸T×=MÑ=MÈaÑ=PÑ9PÐSTÑ9TÑUÐW`Óaó-
ˆÔ)ô (*§y¢y°×1TÑ1TÓ1VÓ'WˆÔ$ä—Y’Y˜t×1Ñ1°4×3EÑ3EÈFÏOÉOÑ\ˆŒ
Ü—9’9˜T×/Ñ/°×1CÑ1CÈ&Ï/É/ÑZˆŒÜ—Y’Y˜t×1Ñ1°4×3EÑ3EÈFÏOÉOÑ\ˆŒ
ä—z’z &×"EÑ"EÓFˆ�r*   Nr"   Úattention_maskÚoutput_attentionsr=   c                 óv  • UR                   u  pEnXESU R                  4nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n	U R                  U5      R                  U5      R	                  SS5      n
[        R                  " X‰R	                  SS5      5      nU[        R                  " U R                  5      -  nU R                  U R                  R                  S5         nUR                  U R                  S   U R                  S   -  U R                  S   U R                  S   -  S5      nUR                  SSS5      R                  5       nX¼R!                  S5      -   nUbm  UR                   S   nUR                  XM-  XÐR"                  XU5      nX²R!                  S5      R!                  S5      -   nUR                  SU R"                  XU5      n[$        R&                  R)                  USS9nU R+                  U5      n[        R                  " Xê5      nUR                  SSSS5      R                  5       nUR-                  5       S S U R.                  4-   nUR                  U5      nU(       a  Xþ4nU$ U4nU$ )Nr/   r   r,   éþÿÿÿr   ©rÞ   r   )r   rÊ   r×   r1   r¸   rØ   rÙ   rA   ÚmatmulÚmathÚsqrtrÑ   rÔ   r4   r2   r3   Ú	unsqueezerÉ   r   rD   ÚsoftmaxrÜ   r¶   rË   )rp   r"   rá   râ   r$   rÞ   r7   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚrelative_position_biasÚ
mask_shapeÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                     r(   r”   ÚClapAudioSelfAttention.forward^  s�  € ð )6×(;Ñ(;Ñ%ˆ
˜Ø"¨¨T×-EÑ-EÐFˆà—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆØ—H‘H˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆ	Ø—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆô !Ÿ<š<¨×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯iªi¸×8PÑ8PÓ.QÑQÐà!%×!BÑ!BÀ4×C_ÑC_×CdÑCdÐegÓChÑ!iÐØ!7×!<Ñ!<Ø×Ñ˜QÑ $×"2Ñ"2°1Ñ"5Ñ5°t×7GÑ7GÈÑ7JÈT×M]ÑM]Ð^_ÑM`Ñ7`Ðbdó"
Ðð "8×!?Ñ!?ÀÀ1ÀaÓ!H×!SÑ!SÓ!UÐØ+×.NÑ.NÈqÓ.QÑQÐàÑ%à'×-Ñ-¨aÑ0ˆJØ/×4Ñ4ØÑ(¨*×6NÑ6NÐPSó Ðð  0×2JÑ2JÈ1Ó2M×2WÑ2WÐXYÓ2ZÑZÐØ/×4Ñ4°R¸×9QÑ9QÐSVÓ\Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÐIˆð Ÿ,™, Ó7ˆäŸš _ÓBˆØ%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆæ6G�=Ð2ˆàˆð O\ÐM]ˆàˆr*   c                 óˆ  • [         R                  " U R                  S   5      n[         R                  " U R                  S   5      n[         R                  " [         R                  " X/SS95      n[         R
                  " US5      nUS S 2S S 2S 4   US S 2S S S 24   -
  nUR                  SSS5      R                  5       nUS S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S4==   SU R                  S   -  S-
  -  ss'   UR                  S5      nU$ )Nr   r   Úij)Úindexingr,   r/   )	rA   rB   r4   ÚstackÚmeshgridr¥   r2   r3   Úsum)rp   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsrÔ   s          r(   rÓ   Ú5ClapAudioSelfAttention.create_relative_position_index‘  s+  € ä—<’< × 0Ñ 0°Ñ 3Ó4ˆÜ—<’< × 0Ñ 0°Ñ 3Ó4ˆÜ—’œUŸ^š^¨XÐ,@È4ÑPÓQˆÜŸš v¨qÓ1ˆØ(ªªA¨t¨Ñ4°~ÂaÈÊqÀjÑ7QÑQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆØšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  A¨×(8Ñ(8¸Ñ(;Ñ$;¸aÑ$?Ñ?Ó Ø"1×"5Ñ"5°bÓ"9ÐØ&Ð&r*   )
rË   rÊ   rÜ   rØ   rÉ   r×   rÑ   rÔ   rÙ   r4   ©NF)rP   rQ   rR   rS   r}   rA   ÚTensorrU   ÚboolrW   r”   rÓ   rX   r—   r˜   s   @r(   rÂ   rÂ   C  sc   ø† õGð: 48Ø).ñ	1à—|‘|ð1ð ×)Ñ)¨DÑ0ð1ð   $™;ð	1ð
 
ˆu�|‰|Ñ	õ1÷f'ð 'r*   rÂ   c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚClapAudioSelfOutputi¡  c                 ó¢   >• [         TU ]  5         [        R                  " X"5      U l        [        R
                  " UR                  5      U l        g rg   )r|   r}   r   rÕ   ÚdenserÚ   rÛ   rÜ   ©rp   ru   rÞ   r�   s      €r(   r}   ÚClapAudioSelfOutput.__init__¢  s4   ø€ Ü‰ÑÔÜ—Y’Y˜sÓ(ˆŒ
Ü—z’z &×"EÑ"EÓFˆ�r*   r"   Úinput_tensorr=   c                 óJ   • U R                  U5      nU R                  U5      nU$ rg   ©r	  rÜ   ©rp   r"   r  s      r(   r”   ÚClapAudioSelfOutput.forward§  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr*   r  ©
rP   rQ   rR   rS   r}   rA   r  r”   rX   r—   r˜   s   @r(   r  r  ¡  s7   ø† õGð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ ò r*   r  c            
       ó˜   ^ • \ rS rSrU 4S jr  S
S\R                  S\R                  S-  S\S-  S\	\R                     4S jjr
S	rU =r$ )ÚClapAudioAttentioni¯  c                 ód   >• [         TU ]  5         [        XX45      U l        [	        X5      U l        g rg   )r|   r}   rÂ   rp   r  r“   rÝ   s        €r(   r}   ÚClapAudioAttention.__init__°  s(   ø€ Ü‰ÑÔÜ*¨6¸	ÓOˆŒ	Ü)¨&Ó6ˆ�r*   Nr"   rá   râ   r=   c                 óf   • U R                  XU5      nU R                  US   U5      nU4USS  -   nU$ )Nr   r   ©rp   r“   )rp   r"   rá   râ   Úself_outputsÚattention_outputrõ   s          r(   r”   ÚClapAudioAttention.forwardµ  sC   € ð —y‘y Ð@QÓRˆØŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr*   ©r“   rp   r  )rP   rQ   rR   rS   r}   rA   r  rU   r  rW   r”   rX   r—   r˜   s   @r(   r  r  ¯  s\   ø† õ7ð 48Ø).ñ		à—|‘|ð	ð ×)Ñ)¨DÑ0ð	ð   $™;ð		ð
 
ˆu�|‰|Ñ	÷	ó 	r*   r  c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚClapAudioIntermediateiÂ  c                 ó  >• [         TU ]  5         [        R                  " U[	        UR
                  U-  5      5      U l        [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g rg   )r|   r}   r   rÕ   r€   Ú	mlp_ratior	  rh   Ú
hidden_actÚstrr	   Úintermediate_act_fnr
  s      €r(   r}   ÚClapAudioIntermediate.__init__Ã  sd   ø€ Ü‰ÑÔÜ—Y’Y˜s¤C¨×(8Ñ(8¸3Ñ(>Ó$?Ó@ˆŒ
Ü�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r*   r"   r=   c                 óJ   • U R                  U5      nU R                  U5      nU$ rg   ©r	  r"  ©rp   r"   s     r(   r”   ÚClapAudioIntermediate.forwardË  ó&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr*   r%  r  r˜   s   @r(   r  r  Â  ó(   ø† õ9ð U§\¡\ð °e·l±l÷ ò r*   r  c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚClapAudioOutputiÒ  c                 óÐ   >• [         TU ]  5         [        R                  " [	        UR
                  U-  5      U5      U l        [        R                  " UR                  5      U l	        g rg   )
r|   r}   r   rÕ   r€   r  r	  rÚ   Úhidden_dropout_probrÜ   r
  s      €r(   r}   ÚClapAudioOutput.__init__Ó  sF   ø€ Ü‰ÑÔÜ—Y’Yœs 6×#3Ñ#3°cÑ#9Ó:¸CÓ@ˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆ�r*   r"   r=   c                 óJ   • U R                  U5      nU R                  U5      nU$ rg   r  r&  s     r(   r”   ÚClapAudioOutput.forwardØ  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr*   r  r  r˜   s   @r(   r+  r+  Ò  s(   ø† õ>ð
 U§\¡\ð °e·l±l÷ ò r*   r+  c                   ó„   ^ • \ rS rSrSrSS\SS4U 4S jjjrS\R                  S\R                  4S jr	S\
4S	 jrS
rU =r$ )ÚClapDropPathiß  zÃStochastic depth (DropPath) per sample, for residual blocks.

Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
<https://arxiv.org/abs/1603.09382>`_.
Ú	drop_probr=   Nc                 ó.   >• [         TU ]  5         Xl        g rg   )r|   r}   r3  )rp   r3  r�   s     €r(   r}   ÚClapDropPath.__init__æ  s   ø€ Ü‰ÑÔØ"�r*   r"   c                 óV  • U R                   S:X  d  U R                  (       d  U$ SU R                   -
  nUR                  S   4SUR                  S-
  -  -   n[        R
                  " X1R                  UR                  S9n[        R                  " XB-   5      nUR                  U5      U-  $ )Nç        r   r   )r   ©Údtyper@   )
r3  Útrainingr   ÚndimrA   Úrandr9  r@   ÚfloorÚdiv)rp   r"   Ú	keep_probr   Úrandom_tensors        r(   r”   ÚClapDropPath.forwardê  s“   € Ø�>‰>˜SÓ ¨¯¯Ø Ð Ø˜Ÿ™Ñ&ˆ	Ø×$Ñ$ QÑ'Ð)¨D°M×4FÑ4FÈÑ4JÑ,KÑKˆÜŸ
š
 5×0CÑ0CÈM×L`ÑL`ÑaˆÜŸš MÑ$=Ó>ˆØ× Ñ  Ó+¨mÑ;Ð;r*   c                 ó    • SU R                    3$ )Nzp=©r3  ro   s    r(   Ú
extra_reprÚClapDropPath.extra_repró  s   € Ø�D—N‘NÐ#Ð$Ð$r*   rC  ©r7  )rP   rQ   rR   rS   rT   Úfloatr}   rA   r  r”   r!  rD  rX   r—   r˜   s   @r(   r2  r2  ß  sL   ø† ññ# %ð #°$÷ #ð #ð< U§\¡\ð <°e·l±lô <ð%˜C÷ %ò %r*   r2  c                   óÀ   ^ • \ rS rSrSU 4S jjrS rS rS r  SS\R                  S\
\\4   S\S	-  S
\S	-  S\
\R                  \R                  4   4
S jjrSrU =r$ )ÚClapAudioLayeriø  c                 óÒ  >• [         TU ]  5         UR                  U l        X`l        UR                  U l        X0l        [        R                  " X!R                  S9U l	        [        XX@R                  S9U l        US:”  a  [        U5      O[        R                  " 5       U l        [        R                  " X!R                  S9U l        [!        X5      U l        [%        X5      U l        g )N©Úeps)r4   r7  )r|   r}   Úchunk_size_feed_forwardÚ
shift_sizer4   Úinput_resolutionr   r«   Úlayer_norm_epsÚlayernorm_beforer  Ú	attentionr2  r¬   Ú	drop_pathÚlayernorm_afterr  Úintermediater+  r“   )rp   ru   rÞ   rO  rß   Údrop_path_raterN  r�   s          €r(   r}   ÚClapAudioLayer.__init__ù  s¯   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$Ø$ŒØ!×-Ñ-ˆÔØ 0ÔÜ "§¢¨S×6KÑ6KÑ LˆÔÜ+¨F¸×P`ÑP`ÑaˆŒØ9GÈ#Ó9Mœ nÔ5ÔSU×S^ÒS^ÓS`ˆŒÜ!Ÿ|š|¨C×5JÑ5JÑKˆÔÜ1°&Ó>ˆÔÜ% fÓ2ˆ�r*   c                 ó  • [        U5      U R                  ::  an  [        S5      U l        [        R
                  R                  5       (       a*  [        R                   " [        R                  " U5      5      O
[        U5      U l        g g ©Nr   )Úminr4   r   rN  rA   ÚjitÚ
is_tracingÚtensor)rp   rO  s     r(   Úset_shift_and_window_sizeÚ(ClapAudioLayer.set_shift_and_window_size  s_   € ÜÐÓ  D×$4Ñ$4Ó4ä'¨›lˆDŒOä=B¿Y¹Y×=QÑ=Q×=SÑ=S”—	’	œ%Ÿ,š,Ð'7Ó8Ô9ÔY\Ð]mÓYnð Õð 5r*   c                 óØ  • U R                   S::  a  g[        R                  " XS9n[        R                  " X$S9nXQU R                  -
  :¬  R	                  5       XQU R                   -
  :¬  R	                  5       -   nXbU R                  -
  :¬  R	                  5       XbU R                   -
  :¬  R	                  5       -   nUSSS2SS4   S-  USSSS2S4   -   R                  U5      n	[        X�R                  5      n
U
R                  SU R                  U R                  -  5      n
U
R                  S5      U
R                  S5      -
  nUR                  US:g  S5      R                  US:H  S	5      nU$ )
um  Build the cyclic-shift attention mask for shifted-window MSA; returns None when shift_size is 0.

Each (h, w) position belongs to one of 9 cyclic-shift regions (3 along each axis), encoded
as ``h_region * 3 + w_region``. Regions per axis:
- 0: indices ``[0, axis - window_size)``
- 1: indices ``[axis - window_size, axis - shift_size)``
- 2: indices ``[axis - shift_size, axis)``
Implementation note: a single arithmetic pass on `torch.arange` (two comparisons +
broadcast add) replaces the original 9-iteration nested-Python-loop slice-assignment â€”
fully vectorised, no per-cell host-side scatter, no GPUâ†”host sync.
r   Nr?   r   r/   r   r,   g      YÀr7  )
rN  rA   rB   r4   ÚlongÚtor9   r1   ré   Úmasked_fill)rp   r5   r6   r9  r@   Úh_idxÚw_idxÚh_regionÚw_regionÚimg_maskÚmask_windowsÚ	attn_masks               r(   Úget_attn_maskÚClapAudioLayer.get_attn_mask  s[  € ð �?‰?˜aÓØÜ—’˜VÑ3ˆÜ—’˜UÑ2ˆØ d×&6Ñ&6Ñ6Ñ6×<Ñ<Ó>À%ÐTX×TcÑTcÑKcÑBc×AiÑAiÓAkÑkˆØ T×%5Ñ%5Ñ5Ñ5×;Ñ;Ó=ÀÐRV×RaÑRaÑJaÑAa×@gÑ@gÓ@iÑiˆØ˜T¢1 d¨DÐ0Ñ1°AÑ5¸ÀÀtÊQÐPTÐATÑ8UÑU×YÑYÐZ_Ó`ˆÜ'¨×2BÑ2BÓCˆØ#×(Ñ(¨¨T×-=Ñ-=À×@PÑ@PÑ-PÓQˆØ ×*Ñ*¨1Ó-°×0FÑ0FÀqÓ0IÑIˆ	Ø×)Ñ)¨)°q©.¸&ÓA×MÑMÈiÐ[\ÉnÐ^aÓbˆ	ØÐr*   c                 óö   • U R                   X0R                   -  -
  U R                   -  nU R                   X R                   -  -
  U R                   -  nSSSUSU4n[        R                  R                  X5      nX4$ rY  )r4   r   rD   r·   )rp   r"   r5   r6   Ú	pad_rightÚ
pad_bottomÚ
pad_valuess          r(   Ú	maybe_padÚClapAudioLayer.maybe_pad'  sy   € Ø×%Ñ%¨×0@Ñ0@Ñ(@Ñ@ÀD×DTÑDTÑTˆ	Ø×&Ñ&¨×2BÑ2BÑ)BÑBÀd×FVÑFVÑVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
ÜŸ™×)Ñ)¨-ÓDˆØÐ(Ð(r*   r"   Úinput_dimensionsrâ   NÚalways_partitionr=   c                 óÂ  • U(       d  U R                  U5        O Uu  pVUR                  5       u  pxn	Un
U R                  U5      nUR                  XuXi5      nU R	                  XU5      u  pUR
                  u  pŒpØU R                  S:”  a.  [        R                  " XR                  * U R                  * 4SS9nOUn[        XàR                  5      nUR                  SU R                  U R                  -  U	5      nU R                  XÍUR                  UR                  S9nU R                  UUUS9nUS   nUR                  SU R                  U R                  U	5      n[        UU R                  XÍ5      nU R                  S:”  a-  [        R                  " UU R                  U R                  4SS9nOUnUS   S:„  =(       d    US   S:„  nU(       a  US S 2S U2S U2S S 24   R!                  5       nUR                  XuU-  U	5      nX R#                  U5      -   nU R%                  U5      nU R'                  U5      nXR)                  U5      -   nU(       a	  UUS	   4nU$ U4nU$ )
Nr   )r   r,   )ÚshiftsÚdimsr/   r8  )râ   r   r.   r   )r^  r¶   rQ  r1   rq  r   rN  rA   Úrollr9   r4   rk  r9  r@   rR  r;   r3   rS  rT  rU  r“   )rp   r"   rs  râ   rt  r5   r6   r$   r½   rŠ   Úshortcutrp  Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsrj  Úattention_outputsr  Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss                           r(   r”   ÚClapAudioLayer.forward.  s{  € ö  Ø×*Ñ*Ð+;Õ<àØ(‰ˆØ"/×"4Ñ"4Ó"6Ñˆ
�xØ ˆà×-Ñ-¨mÓ<ˆà%×*Ñ*¨:¸uÓOˆð %)§N¡N°=È%Ó$PÑ!ˆà&3×&9Ñ&9Ñ#ˆ�yà�?‰?˜QÓÜ$)§J¢J¨}ÇÁÐFVÐY]×YhÑYhÐXhÐEiÐpvÑ$wÑ!à$1Ð!ô !1Ð1F×HXÑHXÓ YÐØ 5× :Ñ :¸2¸t×?OÑ?OÐRV×RbÑRbÑ?bÐdlÓ mÐØ×&Ñ&Ø¨×)<Ñ)<ÐEZ×EaÑEað 'ð 
ˆ	ð !ŸN™NÐ+@À)Ð_p˜NÐqÐà,¨QÑ/Ðà,×1Ñ1°"°d×6FÑ6FÈ×HXÑHXÐZbÓcÐÜ(Ð):¸D×<LÑ<LÈjÓdˆð �?‰?˜QÓÜ %§
¢
¨?ÀDÇOÁOÐUY×UdÑUdÐCeÐlrÑ sÑà /Ðà ‘] QÑ&×;¨*°Q©-¸!Ñ*;ˆ
ÞØ 1²!°W°f°W¸f¸u¸fÂaÐ2GÑ H× SÑ SÓ UÐà-×2Ñ2°:È¹~ÈxÓXÐà §>¡>Ð2CÓ#DÑDˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ$§{¡{°<Ó'@Ñ@ˆæ@Q˜Ð'8¸Ñ';Ð<ˆØÐð YeÐWfˆØÐr*   )
rR  rM  rS  rO  rU  rT  rQ  r“   rN  r4   )r7  r   ©FF)rP   rQ   rR   rS   r}   r^  rk  rq  rA   r  rW   r€   r  r”   rX   r—   r˜   s   @r(   rI  rI  ø  s   ø† ÷3òòò2)ð */Ø(-ñ>à—|‘|ð>ð    S ™/ð>ð   $™;ð	>ð
  ™+ð>ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷>ó >r*   rI  c                   ó’   ^ • \ rS rSrU 4S jr  SS\R                  S\\\4   S\	S-  S\	S-  S\\R                     4
S	 jjr
S
rU =r$ )ÚClapAudioStageip  c                 ó4  >• [         T	U ]  5         Xl        X l        [        R
                  " [        U5       Vs/ s H+  n[        UUUUXh   US-  S:X  a  SOUR                  S-  S9PM-     sn5      U l	        Ub  U" US9U l
        OS U l
        SU l        g s  snf )Nr,   r   )ru   rÞ   rO  rß   rV  rN  rå   F)r|   r}   ru   rÞ   r   Ú
ModuleListÚrangerI  r4   ÚblocksÚ
downsampleÚpointing)
rp   ru   rÞ   rO  Údepthrß   rS  rŒ  Úir�   s
            €r(   r}   ÚClapAudioStage.__init__q  s¤   ø€ Ü‰ÑÔØŒØŒÜ—m’mô ˜uœó
ò &�Aô Ø!ØØ%5Ø'Ø#,¡<Ø%&¨¡U¨a£Z™q°f×6HÑ6HÈAÑ6Môñ &ñ
ó
ˆŒð Ñ!Ù(¨SÑ1ˆD�Oà"ˆDŒOàˆ�ùò'
s   ¹2Br"   rs  râ   Nrt  r=   c                 óü   • Uu  pV[        U R                  5       H  u  pxU" XX45      n	U	S   nM     Un
U R                  b%  US-   S-  US-   S-  pËXVX¼4nU R                  X¢5      nOXVXV4nXU4nU(       a  UW	SS  -  nU$ )Nr   r   r,   )Ú	enumerater‹  rŒ  )rp   r"   rs  râ   rt  r5   r6   r�  Úlayer_modulerƒ  Ú!hidden_states_before_downsamplingÚheight_downsampledÚwidth_downsampledÚoutput_dimensionsÚstage_outputss                  r(   r”   ÚClapAudioStage.forward‹  s°   € ð )‰ˆÜ(¨¯©Ö5‰OˆAÙ(¨ÐJ[ÓnˆMà)¨!Ñ,ŠMñ  6ð
 -:Ð)Ø�?‰?Ñ&Ø5;¸a±ZÀAÑ4EÈÐPQÉ	ÐVWÑGWÐ 1Ø!'Ð0BÐ VÐØ ŸO™OÐ,MÓ`‰Mà!'°Ð >Ðà&ÐK\Ð]ˆæØ˜]¨1¨2Ð.Ñ.ˆMØÐr*   )r‹  ru   rÞ   rŒ  r�  r…  )rP   rQ   rR   rS   r}   rA   r  rW   r€   r  r”   rX   r—   r˜   s   @r(   r‡  r‡  p  sg   ø† õð< */Ø(-ñà—|‘|ðð    S ™/ðð   $™;ð	ð
  ™+ðð 
ˆu�|‰|Ñ	÷ó r*   r‡  c                   óÂ   ^ • \ rS rSrSrS\SS4U 4S jjrS\R                  S\S	\S\R                  4S
 jr	S\R                  S\
\\4   S\R                  4S jrSrU =r$ )ÚClapAudioPatchMergingi¨  zP
Patch Merging Layer.

Args:
    dim (`int`):
        Number of input channels.
rÞ   r=   Nc                 ó    >• [         TU ]  5         [        R                  " SU-  SU-  SS9U l        [        R
                  " SU-  5      U l        g )Nr-   r,   FrÇ   )r|   r}   r   rÕ   Ú	reductionr«   r­   )rp   rÞ   r�   s     €r(   r}   ÚClapAudioPatchMerging.__init__±  s>   ø€ Ü‰ÑÔÜŸš 1 s¡7¨A°©G¸%Ñ@ˆŒÜ—L’L  S¡Ó)ˆ�	r*   Úinput_featurer5   r6   c           
      ó‚   • US-  S:X  d	  US-  S:X  a,  [         R                  R                  USSSUS-  SUS-  45      nU$ )zPPad input feature map to be divisible by 2 in both spatial dimensions if needed.r,   r   r   )r   rD   r·   )rp   rŸ  r5   r6   s       r(   rq  ÚClapAudioPatchMerging.maybe_pad¶  sL   € à�Q‰J˜!‹O ¨¡¨a£ÜŸM™M×-Ñ-¨m¸aÀÀAÀuÈqÁyÐRSÐU[Ð^_ÑU_Ð=`ÓaˆMØÐr*   rs  c                 ó˜  • Uu  p4UR                   u  pVnUR                  XSXG5      nU R                  XU5      n[        R                  " [        S5       VV	s/ s H(  n[        S5        H  o‘S S 2U	S S2US S2S S 24   PM     M*     sn	nSS9nUR                  USSU-  5      nU R                  U5      nU R                  U5      nU$ s  sn	nf )Nr,   r/   rå   r-   )r   r1   rq  rA   ÚcatrŠ  r­   r�  )
rp   rŸ  rs  r5   r6   r$   rÞ   r7   ÚcolÚrows
             r(   r”   ÚClapAudioPatchMerging.forward¼  sÎ   € Ø(‰ˆà(5×(;Ñ(;Ñ%ˆ
˜à%×*Ñ*¨:¸uÓSˆàŸ™ }¸eÓDˆäŸ	š	Ü<AÀ!¼HÔYºH°SÔPUÐVW×PXÈš1˜c˜f 1˜f c f¨1 fªaÐ/Ô0ÑPXÑ0¹HÒYÐ_añ
ˆð &×*Ñ*¨:°r¸1¸|Ñ;KÓLˆàŸ	™	 -Ó0ˆØŸ™ }Ó5ˆàÐùó Zs   Á/C
)r­   r�  )rP   rQ   rR   rS   rT   r€   r}   rA   r  rq  rW   r”   rX   r—   r˜   s   @r(   r›  r›  ¨  sz   ø† ñð*˜Cð * D÷ *ð
 u§|¡|ð ¸Sð Èð ÐQV×Q]ÑQ]ô ð U§\¡\ð ÀUÈ3ÐPSÈ8Á_ð ÐY^×YeÑYe÷ ò r*   r›  c                   ó¬   ^ • \ rS rSrU 4S jrS r\      SS\R                  S-  S\	S-  S\	S-  S\	S-  S	\	S-  S
\	S-  S\
\-  4S jj5       rSrU =r$ )ÚClapAudioEncoderiÐ  c                 ó   >• [         TU ]  5         [        UR                  5      U l        Xl        [        U5      U l        UR                  U l        U R                  R                  U l	        UR                  U l
        UR                  UR                  -  U l        [        UR                  SU R                  S-
  -  -  5      U l        [         R"                  " SUR$                  ['        UR                  5      SS9 Vs/ s H  o"R)                  5       PM     nnU R                  R*                  n[-        U R                  5       Vs/ s H  oTS   SU-  -  US   SU-  -  4PM     snU l        [0        R2                  " [-        U R                  5       Vs/ s Hœ  n[5        U[        UR                  SU-  -  5      U R.                  U   UR                  U   UR6                  U   U['        UR                  S U 5      ['        UR                  S US-    5       X`R                  S-
  :  a  [8        OS S9PMž     sn5      U l        SU l        [0        R>                  " UR                  5      U l         [0        RB                  " U R                  5      U l"        UR                  U l        [0        RF                  " S5      U l$        g s  snf s  snf s  snf )Nr,   r   r   Úcpur?   )ru   rÞ   rO  rŽ  rß   rS  rŒ  F)%r|   r}   rC   ÚdepthsÚ
num_layersru   rš   Úpatch_embedr¦   r    rž   Únum_mel_binsÚ
freq_ratior€   r~   Únum_featuresrA   ÚlinspacerV  rü   Úitemr¢   rŠ  Úinput_resolutionsr   r‰  r‡  rÉ   r›  ÚlayersÚgradient_checkpointingrƒ   Ú
batch_normr«   r­   ÚAdaptiveAvgPool1dÚavgpool)rp   ru   ÚxrV  r¢   r�  Úi_layerr�   s          €r(   r}   ÚClapAudioEncoder.__init__Ñ  s_  ø€ Ü‰ÑÔÜ˜fŸm™mÓ,ˆŒàŒÜ.¨vÓ6ˆÔØ#×1Ñ1ˆÔØ ×,Ñ,×9Ñ9ˆÔØ×)Ñ)ˆŒØ ×*Ñ*¨f×.AÑ.AÑAˆŒä × ?Ñ ?À!ÈÏÉÐZ[ÑH[ÑB\Ñ \Ó]ˆÔä,1¯NªN¸1¸f×>SÑ>SÔUXÐY_×YfÑYfÓUgÐpuÒ,vÓwÒ,v qŸ&™&ž(Ñ,vˆÐwà×$Ñ$×.Ñ.ˆ	Ü\aÐbf×bqÑbqÔ\rÓ!sÒ\rÐWX¨Q¡<°A°q±DÑ#9¸9ÀQ¹<ÈAÈqÉDÑ;QÓ"RÑ\rÑ!sˆÔä—m’mô  % T§_¡_Ô5óò  6�Gô Ø!Ü˜F×;Ñ;¸aÀ¹jÑHÓIØ%)×%;Ñ%;¸GÑ%DØ Ÿ-™-¨Ñ0Ø$×8Ñ8¸ÑAØ,¬S°·±¸xÀÐ1HÓ-IÌCÐPV×P]ÑP]Ð^kÐ`gÐjkÑ`kÐPlÓLmÐnØ9@Ç?Á?ÐUVÑCVÓ9VÕ4Ð]aôñ  6ñó
ˆŒð ',ˆÔ#äŸ.š.¨×)<Ñ)<Ó=ˆŒÜ—L’L ×!2Ñ!2Ó3ˆŒ	Ø—m‘mˆŒÜ×+Ò+¨AÓ.ˆ�ùò3 xùò "tùòs   Ã>KÅKÆB#Kc                 ón  • UR                   u    p#n[        U R                  U R                  -  5      nU R                  U R                  -  nX5:”  d  XF:”  a  [	        S5      eX5:  a!  [
        R                  R                  XU4SSS9nXF:  a!  [
        R                  R                  XU4SSS9nUR                   u  pxpšUR                  XxU R                  -  X�R                  -  U
5      nUR                  SSSS5      R                  5       nUR                  XxX R                  -  X�R                  -  5      nU$ )	zÚ
The input is 4 normalized log mel spectrograms. It is reshape to the common shape of images. Each channel
should represent 1 of the 4 crops of the spectrogram. For more details, refer to the [`ClapFeatureExtractor`].
z@the wav size should be less than or equal to the swin input sizeÚbicubicT)ÚmodeÚalign_cornersr   r   r   r,   )r   r€   rž   r¯  rµ   r   rD   r)   r!   r2   r3   )rp   Únormalized_input_featuresr½   r%   Úfreq_lengthÚ
spec_widthÚspec_heightÚbatchrŠ   ÚtimeÚfreqs              r(   Úreshape_mel2imgÚ ClapAudioEncoder.reshape_mel2imgù  sD  € ð
 *C×)HÑ)HÑ&ˆˆ1˜;ä˜Ÿ™¨$¯/©/Ñ9Ó:ˆ
Ø—n‘n¨¯©Ñ7ˆàÓ# {Ó'@ÜÐ_Ó`Ð`ð Ó#Ü(*¯©×(AÑ(AØ)¸Ð+DÈ9Ðdhð )Bð )Ð%ð Ó$Ü(*¯©×(AÑ(AØ)¸Ð+EÈIÐeið )Bð )Ð%ð '@×&EÑ&EÑ#ˆ˜ð %>×$EÑ$EØ˜dŸo™oÑ-¨t·±Ñ/FÈó%
Ð!ð %>×$EÑ$EÀaÈÈAÈqÓ$Q×$\Ñ$\Ó$^Ð!Ø$=×$EÑ$EØ˜T§O¡OÑ3°T¿_¹_Ñ5Ló%
Ð!ð )Ð(r*   NÚ	is_longerrâ   Úoutput_hidden_statesÚ(output_hidden_states_before_downsamplingrt  Úreturn_dictr=   c                 óÀ  • U=(       d    U R                   R                  nU=(       d    U R                   R                  nUR                  SS5      nU R	                  U5      nUR                  SS5      nS n	U R
                  (       a7  UR                  UR                  5      n
[        R                  " U
S:H  5      S   n	U R                  U5      nUR                  S   nU R                  X¹5      nU(       a  SOS nU(       a  SOS nU(       a  SOS nU R                  S   nU(       aD  UR                  u  nnnUR                  " U/UQUP76 nUR                  SSSS5      nXÛ4-  nUU4-  n[!        U R"                  5       H÷  u  nnU R                  U   nU" UUX65      nUS   nUS   nUS   nUS   US   4nU(       aU  U(       aN  UR                  u  nnnUR                  " U/US   US   4QUP76 nUR                  SSSS5      nUU4-  nUU4-  nORU(       aK  U(       dD  UR                  u  nnnUR                  " U/UQUP76 nUR                  SSSS5      nXÛ4-  nUU4-  nU(       d  Mï  UUSS  -  nMù     U R%                  U5      nUR                  u  nnnUS['        U R(                  5      S-
  -  -  U R*                  S   -  nUS['        U R(                  5      S-
  -  -  U R*                  S   -  nUR                  SSS5      R-                  5       R/                  UUUU5      nUR                  u  nnnnUU R0                  -  n UR/                  UUUU -  U U5      nUR                  SSSSS5      R-                  5       R/                  UUU S5      nU R3                  [        R4                  " US5      5      n![        R4                  " U!S5      n![7        UU!UUS	9$ )
Nr   r   r   r,   rO   rä   r/   r-   )rM   Úpooler_outputr"   rN   )ru   rÊ  râ   r¸   r¶  r¦   rb  r@   rA   ÚwhererÇ  r   r­  r³  r1   r2   r’  r´  r­   rC   r«  r    r3   r!   r¯  r¸  r¥   r   )"rp   Úinput_featuresrÉ  râ   rÊ  rË  rt  rÌ  rÀ  Úis_longer_list_idxÚis_longer_listr"   Ú
frames_numÚall_hidden_statesÚall_reshaped_hidden_statesÚall_self_attentionsrs  r$   r½   Úhidden_sizeÚreshaped_hidden_stater�  r“  rƒ  r”  r—  rM   Ú
n_channelsÚ
freq_shapeÚtemporal_shapeÚn_frequenciesÚn_tempÚ
c_freq_binÚlatent_outputs"                                     r(   r”   ÚClapAudioEncoder.forward  sP  € ð  4×W°t·{±{×7WÑ7WÐØ-×N°·±×1NÑ1NÐà'×1Ñ1°!°QÓ7ˆØ$(§O¡O°NÓ$CÐ!Ø$=×$GÑ$GÈÈ1Ó$MÐ!à!ÐØ××Ø&Ÿ\™\¨.×*?Ñ*?Ó@ˆNÜ!&§¢¨^¸qÑ-@Ó!AÀ!Ñ!DÐà×,Ñ,Ð-FÓGˆà"×(Ñ(¨Ñ+ˆ
à×(Ñ(¨ÓKˆæ"6™B¸DÐÞ+?¡RÀTÐ"Þ$5™b¸4Ðà×1Ñ1°!Ñ4ÐæØ)6×)<Ñ)<Ñ&ˆJ˜˜;à$1×$6Ò$6°zÐ$bÐDTÐ$bÐVaÒ$bÐ!Ø$9×$AÑ$AÀ!ÀQÈÈ1Ó$MÐ!ØÐ!1Ñ1ÐØ&Ð+@Ð*BÑBÐ&ä(¨¯©Ö5‰OˆAˆ|Ø#×5Ñ5°aÑ8Ðá(¨Ð8HÐJ[ÓnˆMà)¨!Ñ,ˆMà0=¸aÑ0@Ð-Ø -¨aÑ 0Ðà 1°"Ñ 5Ð7HÈÑ7LÐMÐæ#Ö(PØ-N×-TÑ-TÑ*�
˜A˜{ð )J×(NÒ(NØð)Ø"3°AÑ"6Ð8IÈ!Ñ8LÐ!Mð)ØOZò)Ð%ð )>×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø!Ð&GÐ%IÑIÐ!Ø*Ð/DÐ.FÑFÑ*Þ%Ö.VØ-:×-@Ñ-@Ñ*�
˜A˜{à(5×(:Ò(:¸:Ð(fÐHXÐ(fÐZeÒ(fÐ%Ø(=×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø!Ð%5Ñ5Ð!Ø*Ð/DÐ.FÑFÐ*ç Ð Ø# }°Q°RÐ'8Ñ8Ò#ñ?  6ðB !ŸI™I mÓ4Ðà$5×$;Ñ$;Ñ!ˆ
�A�zà A¬#¨d¯k©kÓ*:¸QÑ*>Ñ$?Ñ@ÀD×DUÑDUÐVWÑDXÑXˆ
Ø#¨¬c°$·+±+Ó.>ÀÑ.BÑ(CÑDÈ×HYÑHYÐZ[ÑH\Ñ\ˆð ×%Ñ% a¨¨AÓ.×9Ñ9Ó;×CÑCÀJÐPZÐ\fÐhvÓwð 	ð 9J×8OÑ8OÑ5ˆ
�J ¨và" d§o¡oÑ5ˆ
Ø-×5Ñ5Ø˜
 M°ZÑ$?ÀÈVó
Ðð ×%Ñ% a¨¨A¨q°!Ó4×?Ñ?ÓA×IÑIÈ*ÐV`ÐblÐnpÓqð 	ð Ÿ™¤U§]¢]Ð3DÀaÓ%HÓIˆÜŸš m°QÓ7ˆä)Ø/Ø'Ø4Ø*ñ	
ð 	
r*   )r¸  r¶  ru   r«  r¦   r¯  rµ  r³  r´  r­   r°  r¬  r­  r    rž   )NFFFFT)rP   rQ   rR   rS   r}   rÇ  r   rA   rU   r  rW   rZ   r”   rX   r—   r˜   s   @r(   r¨  r¨  Ð  s«   ø† õ&/òP")ðH ð /3Ø).Ø,1Ø@EØ(-Ø#'ñh
ð ×$Ñ$ tÑ+ðh
ð   $™;ð	h
ð
 # T™kðh
ð 37¸±+ðh
ð  ™+ðh
ð ˜D‘[ðh
ð 
Ð%Ñ	%ôh
ó öh
r*   r¨  c                   ó<   ^ • \ rS rSrS\\-  4U 4S jjrS rSrU =r	$ )ÚClapProjectionLayeri‰  ru   c                 óú   >• [         TU ]  5         Xl        UR                  nUR                  n[
        R                  " X#5      U l        [        UR                     U l
        [
        R                  " X35      U l        g rg   )r|   r}   ru   r×  Úprojection_dimr   rÕ   Úlinear1r	   Úprojection_hidden_actÚ
activationÚlinear2)rp   ru   r×  rä  r�   s       €r(   r}   ÚClapProjectionLayer.__init__Š  s[   ø€ Ü‰ÑÔØŒØ×(Ñ(ˆØ×.Ñ.ˆä—y’y Ó=ˆŒÜ  ×!=Ñ!=Ñ>ˆŒÜ—y’y Ó@ˆ�r*   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rg   )rå  rç  rè  r&  s     r(   r”   ÚClapProjectionLayer.forward”  s2   € ØŸ™ ]Ó3ˆØŸ™¨Ó6ˆØŸ™ ]Ó3ˆØÐr*   )rç  ru   rå  rè  )
rP   rQ   rR   rS   r   r   r}   r”   rX   r—   r˜   s   @r(   râ  râ  ‰  s    ø† ðA˜°Ñ?÷ A÷ð r*   râ  c                   óü   ^ • \ rS rSrSrU 4S jr     SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\	S
\R                  4S jjr\S 5       r\SS j5       rSrU =r$ )ÚClapTextEmbeddingsiœ  zGConstruct the embeddings from word, position and token_type embeddings.c                 ób  >• [         TU ]  5         [        R                  " UR                  UR
                  UR                  S9U l        [        R                  " UR                  UR
                  5      U l	        [        R                  " UR
                  UR                  S9U l
        [        R                  " UR                  5      U l        [        R                  " [         R"                  " UR$                  5      R'                  S5      SS9U l        [        R                  " [         R*                  " U R(                  R-                  5       [         R.                  S9SS9U l        UR                  U l        [        R                  " UR$                  UR
                  U R2                  S9U l        g )N)Úpadding_idxrK  ©r   r/   T)Ú
persistent)r9  )r|   r}   r   Ú	EmbeddingÚ
vocab_sizer×  Úpad_token_idÚword_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsr«   rP  rÚ   r-  rÜ   rÒ   rA   rB   Úmax_position_embeddingsÚexpandÚposition_idsrÐ   r¶   ra  Útoken_type_idsrï  Úposition_embeddings©rp   ru   r�   s     €r(   r}   ÚClapTextEmbeddings.__init__Ÿ  s%  ø€ Ü‰ÑÔÜ!Ÿ|š|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÑsˆÔÜ%'§\¢\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆŒäŸIšI¤e§l¢l°6×3QÑ3QÓ&R×&YÑ&YÐZaÓ&bÐosÑtˆÔÜ Ÿiši¬¯ª°D×4EÑ4E×4JÑ4JÓ4LÔTY×T^ÑT^Ñ(_ÐlpÑqˆÔà!×.Ñ.ˆÔÜ#%§<¢<Ø×*Ñ*¨F×,>Ñ,>ÈD×L\ÑL\ñ$
ˆÕ r*   NÚ	input_idsrû  rú  Úinputs_embedsÚpast_key_values_lengthr=   c                 ó  • Uc;  Ub  U R                  XR                  U5      nOU R                  X@R                  5      nUb  UR                  5       nOUR                  5       S S nUu  pxUc³  [	        U S5      (       aj  U R
                  R                  UR                  5      R                  UR                  S   S5      n	[        R                  " U	SUS9n	U	R                  Xx5      nO8[        R                  " U[        R                  U R                  R                  S9nUc  U R                  U5      nU R!                  U5      n
XJ-   nU R#                  U5      nX¼-   nU R%                  U5      nU R'                  U5      nU$ )Nr/   rû  r   r   )rÞ   Úindexr8  )Ú"create_position_ids_from_input_idsrï  Ú&create_position_ids_from_inputs_embedsr¶   Úhasattrrû  rb  r@   rù  r   rA   ÚgatherrÐ   ra  rú  rõ  r÷  rü  r«   rÜ   )rp   rÿ  rû  rú  r   r  Úinput_shaper$   Ú
seq_lengthÚbuffered_token_type_idsr÷  Ú
embeddingsrü  s                r(   r”   ÚClapTextEmbeddings.forward¯  st  € ð ÑØÑ$à#×FÑFØ×/Ñ/Ð1Gó ‘ð  $×JÑJÈ=×ZjÑZjÓk�àÑ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà!,Ñˆ
ð
 Ñ!Ü�tÐ-×.Ñ.à*.×*=Ñ*=×*@Ñ*@À×ATÑATÓ*U×*\Ñ*\Ð]i×]oÑ]oÐpqÑ]rÐtvÓ*wÐ'Ü*/¯,ª,Ð7NÐTUÐ]iÑ*jÐ'Ø!8×!?Ñ!?À
Ó!W‘ä!&§¢¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÑ!l�àÑ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ñ:ˆ
à"×6Ñ6°|ÓDÐØÑ5ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr*   c                 óà   • U R                  5       SS nUS   n[        R                  " US-   X1-   S-   [        R                  U R                  S9nUR                  S5      R                  U5      $ )z¯
We are provided embeddings directly. We cannot infer which are padded so just generate sequential position ids.

Args:
    inputs_embeds: torch.Tensor

Returns: torch.Tensor
Nr/   r   r8  r   )r¶   rA   rB   ra  r@   ré   rù  )r   rï  r  Úsequence_lengthrú  s        r(   r  Ú9ClapTextEmbeddings.create_position_ids_from_inputs_embedsß  sn   € ð $×(Ñ(Ó*¨3¨BÐ/ˆØ% a™.ˆä—|’|Ø˜!‰O˜_Ñ:¸QÑ>ÄeÇjÁjÐYf×YmÑYmñ
ˆð ×%Ñ% aÓ(×/Ñ/°Ó<Ð<r*   c                 óº   • U R                  U5      R                  5       n[        R                  " USS9R	                  U5      U-   U-  nUR                  5       U-   $ )zí
Replace non-padding symbols with their position numbers. Position numbers begin at padding_idx+1. Padding symbols
are ignored. This is modified from fairseq's `utils.make_positions`.

Args:
    x: torch.Tensor x:

Returns: torch.Tensor
r   rå   )Úner€   rA   ÚcumsumÚtype_asra  )rÿ  rï  r  ÚmaskÚincremental_indicess        r(   r  Ú5ClapTextEmbeddings.create_position_ids_from_input_idsñ  sW   € ð �|‰|˜KÓ(×,Ñ,Ó.ˆÜ$Ÿ|š|¨D°aÑ8×@Ñ@ÀÓFÐI_Ñ_ÐcgÑgÐØ"×'Ñ'Ó)¨KÑ7Ð7r*   )r«   rÜ   rï  rü  rú  r÷  rû  rõ  )NNNNr   )r   )rP   rQ   rR   rS   rT   r}   rA   Ú
LongTensorrU   r€   r  r”   Ústaticmethodr  r  rX   r—   r˜   s   @r(   rí  rí  œ  s´   ø† ÙQõ
ð$ .2Ø26Ø04Ø26Ø&'ñ.à×#Ñ# dÑ*ð.ð ×(Ñ(¨4Ñ/ð.ð ×&Ñ&¨Ñ-ð	.ð
 ×(Ñ(¨4Ñ/ð.ð !$ð.ð 
�‰õ.ð` ñ=ó ð=ð" ó8ó ö8r*   rí  Úmoduler×   rØ   rÙ   rá   ÚscalingrÜ   c                 ó°  • [         R                  " XR                  SS5      5      U-  nUb  X„-   n[        R                  R                  US[         R                  S9R                  UR                  5      n[        R                  R                  X†U R                  S9n[         R                  " Xƒ5      n	U	R                  SS5      R                  5       n	X˜4$ )Nr,   r   r/   )rÞ   r9  )Úpr:  r   )rA   ræ   r¸   r   rD   rê   Úfloat32rb  r9  rÜ   r:  r3   )
r  r×   rØ   rÙ   rá   r  rÜ   ÚkwargsÚattn_weightsÚattn_outputs
             r(   Úeager_attention_forwardr!    s°   € ô —<’< §}¡}°Q¸Ó':Ó;¸gÑE€LØÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÐS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KØÐ$Ð$r*   c                   ó´   ^ • \ rS rSrU 4S jr S
S\R                  S\R                  S-  S\\	   S\
\R                  \R                  S-  4   4S jjrS	rU =r$ )ÚClapTextSelfAttentioni  c                 ó6  >• [         TU ]  5         UR                  UR                  -  S:w  a7  [	        US5      (       d&  [        SUR                   SUR                   S35      eXl        UR                  U l        [        UR                  UR                  -  5      U l        U R                  U R                  -  U l	        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                   5      U l        UR                   U l        U R                  S-  U l        g )Nr   Úembedding_sizerÄ   rÅ   rÆ   ç      à¿)r|   r}   r×  rÉ   r  rµ   ru   r€   rÊ   rË   r   rÕ   r×   rØ   rÙ   rÚ   rÛ   rÜ   Úattention_dropoutr  rý  s     €r(   r}   ÚClapTextSelfAttention.__init__  sD  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÓ?ÌÐPVÐXh×HiÑHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð
 ŒØ#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y’Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9’9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y’Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z’z &×"EÑ"EÓFˆŒØ!'×!DÑ!DˆÔØ×/Ñ/°Ñ5ˆ�r*   Nr"   rá   r  r=   c                 ó€  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n[        R                  " U R                  R                  [        5      n	U	" U UUUU4U R                  (       d  SOU R                  U R                  S.UD6u  p«U
R                  " / UQSP76 R!                  5       n
X«4$ )Nr/   r   r,   r7  )rÜ   r  )r   rÊ   r×   r1   r¸   rØ   rÙ   r   Úget_interfaceru   Ú_attn_implementationr!  r:  r'  r  r!   r3   )rp   r"   rá   r  r  rë   Úquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer   r  s               r(   r”   ÚClapTextSelfAttention.forward0  s8  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆà—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆØ—X‘X˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆ
Ø—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}Ÿ}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØÐ(Ð(r*   )
rË   r'  rÊ   ru   rÜ   rØ   rÉ   r×   r  rÙ   rg   )rP   rQ   rR   rS   r}   rA   r  rU   r   r   rW   r”   rX   r—   r˜   s   @r(   r#  r#    si   ø† õ6ð0 48ñ)à—|‘|ð)ð ×)Ñ)¨DÑ0ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)ó )r*   r#  c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚClapTextSelfOutputiQ  c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " UR                  UR                  S9U l        [        R                  " UR                  5      U l
        g ©NrK  )r|   r}   r   rÕ   r×  r	  r«   rP  rÚ   r-  rÜ   rý  s     €r(   r}   ÚClapTextSelfOutput.__init__R  s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�r*   r"   r  r=   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ rg   ©r	  rÜ   r«   r  s      r(   r”   ÚClapTextSelfOutput.forwardX  ó5   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }Ñ'CÓDˆØÐr*   ©r«   r	  rÜ   r  r˜   s   @r(   r2  r2  Q  ó6   ø† õ>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ ò r*   r2  c            	       ó�   ^ • \ rS rSrU 4S jr S
S\R                  S\R                  S-  S\\	   S\R                  4S jjr
S	rU =r$ )ÚClapTextAttentioni`  c                 ób   >• [         TU ]  5         [        U5      U l        [	        U5      U l        g rg   )r|   r}   r#  rp   r2  r“   rý  s     €r(   r}   ÚClapTextAttention.__init__a  s&   ø€ Ü‰ÑÔÜ)¨&Ó1ˆŒ	Ü(¨Ó0ˆ�r*   Nr"   rá   r  r=   c                 óZ   • UnU R                   " U4SU0UD6u  pU R                  X5      nU$ ©Nrá   r  )rp   r"   rá   r  r�   r½   s         r(   r”   ÚClapTextAttention.forwardf  sE   € ð !ˆØŸ9š9Øñ
à)ð
ð ñ
Ñˆð
 Ÿ™ MÓ<ˆØÐr*   r  rg   )rP   rQ   rR   rS   r}   rA   r  rU   r   r   r”   rX   r—   r˜   s   @r(   r=  r=  `  sV   ø† õ1ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰÷ó r*   r=  c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚClapTextIntermediateiw  c                 ó  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g rg   )r|   r}   r   rÕ   r×  Úintermediate_sizer	  rh   r   r!  r	   r"  rý  s     €r(   r}   ÚClapTextIntermediate.__init__x  s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r*   r"   r=   c                 óJ   • U R                  U5      nU R                  U5      nU$ rg   r%  r&  s     r(   r”   ÚClapTextIntermediate.forward€  r(  r*   r%  r  r˜   s   @r(   rD  rD  w  r)  r*   rD  c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚClapTextOutputi‡  c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        R                  " UR
                  UR                  S9U l        [        R                  " UR                  5      U l        g r4  )r|   r}   r   rÕ   rF  r×  r	  r«   rP  rÚ   r-  rÜ   rý  s     €r(   r}   ÚClapTextOutput.__init__ˆ  s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�r*   r"   r  r=   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ rg   r7  r  s      r(   r”   ÚClapTextOutput.forwardŽ  r9  r*   r:  r  r˜   s   @r(   rK  rK  ‡  r;  r*   rK  c            	       ó–   ^ • \ rS rSrU 4S jr SS\R                  S\R                  S-  S\\	   S\R                  4S jjr
S	 rS
rU =r$ )ÚClapTextLayeri–  c                 ó²   >• [         TU ]  5         UR                  U l        SU l        [	        U5      U l        [        U5      U l        [        U5      U l	        g )Nr   )
r|   r}   rM  Úseq_len_dimr=  rR  rD  rU  rK  r“   rý  s     €r(   r}   ÚClapTextLayer.__init__—  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6Ó2ˆŒÜ0°Ó8ˆÔÜ$ VÓ,ˆ�r*   Nr"   rá   r  r=   c                 óˆ   • U R                   " U4SU0UD6n[        U R                  U R                  U R                  U5      nU$ rA  )rR  r   Úfeed_forward_chunkrM  rS  )rp   r"   rá   r  s       r(   r”   ÚClapTextLayer.forwardŸ  sW   € ð ŸšØñ
à)ð
ð ñ
ˆô 2Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUbó
ˆð Ðr*   c                 óJ   • U R                  U5      nU R                  X!5      nU$ rg   )rU  r“   )rp   r  Úintermediate_outputr‚  s       r(   rV  Ú ClapTextLayer.feed_forward_chunk±  s)   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6ÓIˆØÐr*   )rR  rM  rU  r“   rS  rg   )rP   rQ   rR   rS   r}   rA   r  rU   r   r   r”   rV  rX   r—   r˜   s   @r(   rQ  rQ  –  s[   ø† õ-ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰õ÷$ð r*   rQ  c            	       ó|   ^ • \ rS rSrU 4S jr S
S\R                  S\R                  S-  S\\	   S\
4S jjrS	rU =r$ )ÚClapTextEncoderi¸  c                 óÖ   >• [         TU ]  5         Xl        [        R                  " [        UR                  5       Vs/ s H  n[        U5      PM     sn5      U l        SU l	        g s  snf r  )
r|   r}   ru   r   r‰  rŠ  Únum_hidden_layersrQ  Úlayerrµ  )rp   ru   r�  r�   s      €r(   r}   ÚClapTextEncoder.__init__¹  sR   ø€ Ü‰ÑÔØŒÜ—]’]Ä5È×IaÑIaÔCbÓ#cÒCb¸a¤M°&Ö$9ÑCbÑ#cÓdˆŒ
Ø&+ˆÕ#ùò $ds   ½A&Nr"   rá   r  r=   c                 óN   • U R                    H  nU" UU40 UD6nM     [        US9$ )N)rM   )r_  r   )rp   r"   rá   r  r“  s        r(   r”   ÚClapTextEncoder.forward¿  s>   € ð !ŸJœJˆLÙ(ØØñð ñŠMñ 'ô Ø+ñ
ð 	
r*   )ru   rµ  r_  rg   )rP   rQ   rR   rS   r}   rA   r  rU   r   r   r   r”   rX   r—   r˜   s   @r(   r\  r\  ¸  sR   ø† õ,ð 48ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð Ð+Ñ,ð	
ð
 
÷
ó 
r*   r\  c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚClapTextPooleriÒ  c                 ó¶   >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " 5       U l        g rg   )r|   r}   r   rÕ   r×  r	  ÚTanhrç  rý  s     €r(   r}   ÚClapTextPooler.__init__Ó  s9   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'š'›)ˆ�r*   r"   r=   c                 ó\   • US S 2S4   nU R                  U5      nU R                  U5      nU$ rY  )r	  rç  )rp   r"   Úfirst_token_tensorÚpooled_outputs       r(   r”   ÚClapTextPooler.forwardØ  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr*   )rç  r	  r  r˜   s   @r(   rd  rd  Ò  s(   ø† õ$ð
 U§\¡\ð °e·l±l÷ ò r*   rd  c                   ó„   ^ • \ rS rSr% \\S'   SrSrSr\	R                  " 5       S\R                  4U 4S jj5       rSrU =r$ )	ÚClapPreTrainedModeliá  ru   Úclap)ÚaudioÚtextFr  c                 ó2  >• [         TU ]  U5        U R                  R                  n[	        U[
        5      (       aÖ  [        R                  " UR                  R                  SUS-  S9  [        R                  " UR                  R                  SUS-  S9  [        R                  " UR                  [        R                  " UR                  R                  S   5      R!                  S5      5        [        R"                  " UR$                  5        g	[	        U[&        5      (       a“  [        R(                  " UR*                  [,        R.                  " U R                  R0                  5      5        [        R(                  " UR2                  [,        R.                  " U R                  R0                  5      5        g	[	        U[4        R6                  5      (       a$  [        R                  " UR                  SUS-  S9  g	[	        U[4        R8                  [4        R:                  45      (       a‡  U R                  R<                  S-  SU R                  R>                  -  S-  -  U-  n[        R                  " UR                  US9  UR@                  b!  [        R"                  " UR@                  5        g	g	[	        U[B        5      (       aP  [        R"                  " URD                  5        [        R                  " URF                  URI                  5       5        g	g	)
zInitialize the weightsr7  g{®Gáz”?)ÚmeanÚstdr/   rð  r&  r,   )rs  N)%r|   Ú_init_weightsru   Úinitializer_factorrh   rí  ÚinitÚnormal_rü  Úweightr÷  Úcopy_rú  rA   rB   r   rù  Úzeros_rû  Ú	ClapModelÚ	constant_Úlogit_scale_arç   ÚlogÚlogit_scale_init_valueÚlogit_scale_tr   rò  r‚   rÕ   r×  r^  rÈ   rÂ   rÑ   rÔ   rÓ   )rp   r  ÚfactorÚin_proj_stdr�   s       €r(   rt  Ú!ClapPreTrainedModel._init_weightsè  s  ø€ ô 	‰Ñ˜fÔ%Ø—‘×/Ñ/ˆä�fÔ0×1Ñ1Ü�LŠL˜×3Ñ3×:Ñ:ÀÈ&ÐSWÉ-ÒXÜ�LŠL˜×5Ñ5×<Ñ<À3ÈFÐUYÉMÒZÜ�JŠJ�v×*Ñ*¬E¯LªL¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�KŠK˜×-Ñ-Õ.Ü˜¤	×*Ñ*Ü�NŠN˜6×/Ñ/´·²¸$¿+¹+×:\Ñ:\Ó1]Ô^Ü�NŠN˜6×/Ñ/´·²¸$¿+¹+×:\Ñ:\Ó1]Õ^Ü˜¤§¡×-Ñ-Ü�LŠL˜Ÿ™¨S°f¸t±mÓDÜ˜¤§¡¬B¯I©IÐ 6×7Ñ7ØŸ;™;×2Ñ2°DÑ8¸aÀ$Ç+Á+×B_ÑB_Ñ>_ÐdhÑ=hÑiÐlrÑrˆKÜ�LŠL˜Ÿ™¨KÒ8Ø�{‰{Ñ&Ü—’˜FŸK™KÕ(ð 'ä˜Ô 6×7Ñ7Ü�KŠK˜×;Ñ;Ô<Ü�JŠJ�v×5Ñ5°v×7\Ñ7\Ó7^Õ_ð 8r*   rO   )rP   rQ   rR   rS   r   rV   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingrA   Úno_gradr   ÚModulert  rX   r—   r˜   s   @r(   rm  rm  á  sA   ø‡ àÓØÐØ(ÐØ&+Ð#à
‡]‚]ƒ_ð` B§I¡Iö `ó ö`r*   rm  c                   óÒ   ^ • \ rS rSr% \\S'   SrSrS\4U 4S jjrS\	R                  4S jr\  SS\R                  S-  S	\R                  S-  S
\\   S\\-  4S jj5       rSrU =r$ )ÚClapAudioModeli  ru   rÐ  ro  c                 ód   >• [         TU ]  U5        [        U5      U l        U R	                  5         g rg   )r|   r}   r¨  Úaudio_encoderÚ	post_initrý  s     €r(   r}   ÚClapAudioModel.__init__  s'   ø€ Ü‰Ñ˜Ô Ü-¨fÓ5ˆÔà�‰Õr*   r=   c                 óB   • U R                   R                  R                  $ rg   )rŒ  r­  r©   ro   s    r(   Úget_input_embeddingsÚ#ClapAudioModel.get_input_embeddings  s   € Ø×!Ñ!×-Ñ-×2Ñ2Ð2r*   NrÉ  r  c                 ó,   • U R                   " SUUS.UD6$ )aì  
is_longer (`torch.FloatTensor`, of shape `(batch_size, 1)`, *optional*):
    Whether the audio clip is longer than `max_length`. If `True`, a feature fusion will be enabled to enhance
    the features.

Examples:

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

>>> dataset = load_dataset("hf-internal-testing/ashraq-esc50-1-dog-example")
>>> audio_sample = dataset["train"]["audio"][0]["array"]

>>> model = ClapAudioModel.from_pretrained("laion/clap-htsat-fused")
>>> processor = AutoProcessor.from_pretrained("laion/clap-htsat-fused")

>>> inputs = processor(audio=audio_sample, return_tensors="pt")

>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
```©rÐ  rÉ  rO   ©rŒ  )rp   rÐ  rÉ  r  s       r(   r”   ÚClapAudioModel.forward  s,   € ð: ×!Ò!ð 
Ø)Øñ
ð ñ
ð 	
r*   r”  ©NN)rP   rQ   rR   rS   r   rV   Úmain_input_namer…  r}   r   rˆ  r�  r   rA   rU   Ú
BoolTensorr   r   rW   r   r”   rX   r—   r˜   s   @r(   rŠ  rŠ    s”   ø‡ ØÓØ&€OØÐð˜÷ ð3 b§i¡iô 3ð ð 48Ø-1ñ 
à×)Ñ)¨DÑ0ð 
ð ×#Ñ# dÑ*ð 
ð Ð+Ñ,ð	 
ð
 
Ð+Ñ	+ô 
ó ö 
r*   rŠ  a0  
    The model can behave as an encoder (with only self-attention) as well as a decoder, in which case a layer of
    cross-attention is added between the self-attention layers, following the architecture described in *Attention is
    all you need*_ by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz
    Kaiser and Illia Polosukhin.

    To behave as an decoder the model needs to be initialized with the `is_decoder` argument of the configuration set
    to `True`. To be used in a Seq2Seq model, the model needs to initialized with both `is_decoder` argument and
    `add_cross_attention` set to `True`; an `encoder_hidden_states` is then expected as an input to the forward pass.

    .. _*Attention is all you need*: https://huggingface.co/papers/1706.03762
    c                   ó,  ^ • \ rS rSr% \\S'   Sr\\S.r	SU 4S jjr
S rS r\\\     SS	\R"                  S-  S
\R"                  S-  S\R"                  S-  S\R"                  S-  S\R"                  S-  S\\   S\4S jj5       5       5       rSrU =r$ )ÚClapTextModeli4  ru   ©rp  ©r"   rN   c                 óÂ   >• [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        U(       a  [        U5      OSU l        U R                  5         g)z^
add_pooling_layer (bool, *optional*, defaults to `True`):
    Whether to add a pooling layer
N)
r|   r}   ru   rí  r  r\  Úencoderrd  Úpoolerr�  )rp   ru   Úadd_pooling_layerr�   s      €r(   r}   ÚClapTextModel.__init__J  sK   ø€ ô
 	‰Ñ˜Ô ØŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒæ0A”n VÔ,ÀtˆŒð 	�‰Õr*   c                 ó.   • U R                   R                  $ rg   ©r  rõ  ro   s    r(   r�  Ú"ClapTextModel.get_input_embeddingsZ  s   € Ø�‰×.Ñ.Ð.r*   c                 ó$   • XR                   l        g rg   r£  ©rp   rÙ   s     r(   Úset_input_embeddingsÚ"ClapTextModel.set_input_embeddings]  s   € Ø*/�‰Õ'r*   Nrÿ  rá   rû  rú  r   r  r=   c                 óø  • Ub  Ub  [        S5      eUb"  U R                  X5        UR                  5       nO"Ub  UR                  5       S S nO[        S5      eUu  p‰Ub  UR                  OUR                  n
Uc  [        R
                  " X‰4U
S9nU R                  UUUUS9n[        U R                  UUS9nU R                  " U4SU0UD6nUS   nU R                  b  U R                  U5      OS n[        UUS	9$ )
NzDYou cannot specify both input_ids and inputs_embeds at the same timer/   z5You have to specify either input_ids or inputs_embedsr?   )rÿ  rú  rû  r   )ru   r   rá   rá   r   )rM   rÎ  )rµ   Ú%warn_if_padding_and_no_attention_maskr¶   r@   rA   Úonesr  r
   ru   rž  rŸ  r   )rp   rÿ  rá   rû  rú  r   r  r  r$   r	  r@   Úembedding_outputÚencoder_outputsÚsequence_outputrj  s                  r(   r”   ÚClapTextModel.forward`  s2  € ð Ñ  ]Ñ%>ÜÐcÓdÐdØÑ"Ø×6Ñ6°yÔQØ#Ÿ.™.Ó*‰KØÑ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà!,Ñˆ
Ø%.Ñ%:�×!Ò!À×@TÑ@TˆàÑ!Ü"ŸZšZ¨*Ð)AÈ6ÑRˆNàŸ?™?ØØ%Ø)Ø'ð	 +ð 
Ðô 3Ø—;‘;Ø*Ø)ñ
ˆð Ÿ,š,Øñ
à)ð
ð ñ
ˆð
 *¨!Ñ,ˆØ8<¿¹Ñ8O˜Ÿ™ OÔ4ÐUYˆä)Ø-Ø'ñ
ð 	
r*   )ru   r  rž  rŸ  )T)NNNNN)rP   rQ   rR   rS   r   rV   r…  rQ  r#  Ú_can_record_outputsr}   r�  r§  r   r   r   rA   r  r   r   r   r”   rX   r—   r˜   s   @r(   rš  rš  4  sÚ   ø‡ ð ÓØ Ðà&Ø+ñÐ÷
ò /ò0ð  ØØð *.Ø.2Ø.2Ø,0Ø-1ñ1
à—<‘< $Ñ&ð1
ð Ÿ™ tÑ+ð1
ð Ÿ™ tÑ+ð	1
ð
 —l‘l TÑ)ð1
ð —|‘| dÑ*ð1
ð Ð+Ñ,ð1
ð 
$ô1
ó ó ó  ö1
r*   rš  c                   ó:  ^ • \ rS rSr% \\S'   S\4U 4S jjr\\  SS\	R                  S\	R                  S-  S\	R                  S-  S\\   S	\\-  4
S
 jj5       5       r\\  SS\	R                  S\	R                  S-  S\	R                  S-  S\\   S	\\-  4
S jj5       5       r\\      SS\	R"                  S-  S\	R$                  S-  S\	R&                  S-  S\	R                  S-  S\	R"                  S-  S\S-  S\\   S	\\-  4S jj5       5       rSrU =r$ )r{  i—  ru   c                 óN  >• [         TU ]  U5        [        UR                  [        5      (       d"  [        S[        UR                  5       S35      e[        UR                  [        5      (       d"  [        S[        UR                  5       S35      eUR                  nUR                  n[        R                  " [        R                  " [        R                  " UR                  5      5      5      U l        [        R                  " [        R                  " [        R                  " UR                  5      5      5      U l        UR$                  U l        ['        U5      U l        [+        U5      U l        [/        U5      U l        [+        U5      U l        U R5                  5         g )NzKconfig.text_config is expected to be of type ClapTextConfig but is of type Ú.zMconfig.audio_config is expected to be of type ClapAudioConfig but is of type )r|   r}   rh   Útext_configr   Ú	TypeErrorÚtypeÚaudio_configr   r   rÏ   rA   r]  rç   r~  r  r}  r€  rä  rš  Ú
text_modelrâ  Útext_projectionrŠ  Úaudio_modelÚaudio_projectionr�  )rp   ru   r´  r·  r�   s       €r(   r}   ÚClapModel.__init__›  sC  ø€ Ü‰Ñ˜Ô ä˜&×,Ñ,¬n×=Ñ=ÜðÜ˜×+Ñ+Ó,Ð-¨Qð0óð ô
 ˜&×-Ñ-¬×?Ñ?ÜðÜ˜×,Ñ,Ó-Ð.¨að1óð ð
 ×(Ñ(ˆØ×*Ñ*ˆäŸ\š\¬%¯,ª,´t·x²xÀ×@]Ñ@]Ó7^Ó*_Ó`ˆÔÜŸ\š\¬%¯,ª,´t·x²xÀ×@]Ñ@]Ó7^Ó*_Ó`ˆÔà$×3Ñ3ˆÔä'¨Ó4ˆŒÜ2°;Ó?ˆÔä)¨,Ó7ˆÔÜ 3°LÓ AˆÔð 	�‰Õr*   Nrÿ  rá   rú  r  r=   c                 óœ   • U R                   " SUUUS.UD6nU R                  UR                  5      n[        R                  " USS9Ul        U$ )a±  
Examples:

```python
>>> import torch
>>> from transformers import AutoTokenizer, ClapModel

>>> model = ClapModel.from_pretrained("laion/clap-htsat-unfused")
>>> tokenizer = AutoTokenizer.from_pretrained("laion/clap-htsat-unfused")

>>> inputs = tokenizer(["the sound of a cat", "the sound of a dog"], padding=True, return_tensors="pt")
>>> with torch.inference_mode():
...     text_features = model.get_text_features(**inputs)
```©rÿ  rá   rú  r/   rå   rO   )r¸  r¹  rÎ  ÚFÚ	normalize)rp   rÿ  rá   rú  r  Útext_outputsÚtext_featuress          r(   Úget_text_featuresÚClapModel.get_text_features»  s[   € ð. 48·?²?ð 4
ØØ)Ø%ñ4
ð ñ	4
ˆð ×,Ñ,¨\×-GÑ-GÓHˆÜ%&§[¢[°ÀBÑ%GˆÔ"àÐr*   rÐ  rÉ  c                 ó˜   • U R                   " SXS.UD6nU R                  UR                  5      n[        R                  " USS9Ul        U$ )a–  
is_longer (`torch.FloatTensor`, of shape `(batch_size, 1)`, *optional*):
    Whether the audio clip is longer than `max_length`. If `True`, a feature fusion will be enabled to enhance
    the features.

Examples:

```python
>>> import torch
>>> from transformers import AutoFeatureExtractor, ClapModel

>>> model = ClapModel.from_pretrained("laion/clap-htsat-unfused")
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("laion/clap-htsat-unfused")
>>> random_audio = torch.rand((16_000))

>>> inputs = feature_extractor(random_audio, return_tensors="pt")
>>> with torch.inference_mode():
...     audio_features = model.get_audio_features(**inputs)
```r“  r/   rå   rO   )rº  r»  rÎ  r¿  rÀ  )rp   rÐ  rÉ  rá   r  Úaudio_outputsÚaudio_featuress          r(   Úget_audio_featuresÚClapModel.get_audio_featuresÝ  sU   € ð8 59×4DÒ4Dð 5
Ø)ñ5
ØBHñ5
ˆð ×.Ñ.¨}×/JÑ/JÓKˆÜ&'§k¢k°.ÀbÑ&IˆÔ#àÐr*   Úreturn_lossc           
      ó¤  • U R                   " S
UUS.UD6nU R                  " S
UUUS.UD6n	UR                  n
U R                  U
5      n
U	R                  nU R	                  U5      nXªR                  SSSS9-  n
X»R                  SSSS9-  nU R                  R                  5       nU R                  R                  5       n[        R                  " XºR                  5       5      U-  n[        R                  " X«R                  5       5      U-  nSnU(       a,  [        U5      n[        UR                  5       5      nUU-   S-  n[        UUUUU
U	US	9$ )a*  
is_longer (`torch.FloatTensor`, of shape `(batch_size, 1)`, *optional*):
    Whether the audio clip is longer than `max_length`. If `True`, a feature fusion will be enabled to enhance
    the features.
return_loss (`bool`, *optional*):
    Whether or not to return the contrastive loss.

Examples:

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

>>> dataset = load_dataset("hf-internal-testing/ashraq-esc50-1-dog-example")
>>> audio_sample = dataset["train"]["audio"][0]["array"]

>>> model = ClapModel.from_pretrained("laion/clap-htsat-unfused")
>>> processor = AutoProcessor.from_pretrained("laion/clap-htsat-unfused")

>>> input_text = ["Sound of a dog", "Sound of vacuum cleaner"]

>>> inputs = processor(text=input_text, audio=audio_sample, return_tensors="pt", padding=True)

>>> outputs = model(**inputs)
>>> logits_per_audio = outputs.logits_per_audio  # this is the audio-text similarity score
>>> probs = logits_per_audio.softmax(dim=-1)  # we can take the softmax to get the label probabilities
```r“  r¾  r,   r/   T)r  rÞ   ÚkeepdimNg       @)r`   ra   rb   rL   r\   rc   rd   rO   )rº  r¸  rÎ  r»  r¹  r­   r€  Úexpr}  rA   ræ   ÚtrG   r^   )rp   rÿ  rÐ  rÉ  rá   rú  rÊ  r  rÆ  rÁ  r\   rL   Úlogit_scale_textÚlogit_scale_audiorb   ra   r`   Úcaption_lossÚ
audio_losss                      r(   r”   ÚClapModel.forward  sy  € ðN ×(Ò(ð 
Ø)Øñ
ð ñ
ˆð —’ð 
ØØ)Ø%ñ
ð ñ	
ˆð %×2Ñ2ˆØ×,Ñ,¨\Ó:ˆà"×0Ñ0ˆØ×*Ñ*¨;Ó7ˆð $×&7Ñ&7¸!ÀÈTÐ&7Ð&RÑRˆØ!×$4Ñ$4°q¸bÈ$Ð$4Ð$OÑOˆð  ×-Ñ-×1Ñ1Ó3ÐØ ×.Ñ.×2Ñ2Ó4ÐÜŸ,š, {·N±NÓ4DÓEÐHXÑXˆÜ Ÿ<š<¨·m±m³oÓFÐIZÑZÐàˆÞÜ+¨OÓ<ˆLÜ)Ð*:×*<Ñ*<Ó*>Ó?ˆJØ  :Ñ-°Ñ4ˆDäØØ-Ø+Ø#Ø%Ø*Ø,ñ
ð 	
r*   )rº  r»  r}  r€  rä  r¸  r¹  r–  )NNNNNN)rP   rQ   rR   rS   r   rV   r}   r   r   rA   r  r   r   rW   r   rÃ  rÈ  r  rU   r˜  r  r^   r”   rX   r—   r˜   s   @r(   r{  r{  —  sÐ  ø‡ àÓð˜z÷ ð@ Øð /3Ø,0ñ	à—<‘<ðð Ÿ™ tÑ+ðð —l‘l TÑ)ð	ð
 Ð+Ñ,ðð 
Ð+Ñ	+ôó ó ðð@ Øð *.Ø.2ñ	 àŸ™ð ð —<‘< $Ñ&ð ð Ÿ™ tÑ+ð	 ð
 Ð+Ñ,ð ð 
Ð+Ñ	+ô ó ó ð ðD Øð .2Ø37Ø-1Ø.2Ø04Ø#'ñP
à×#Ñ# dÑ*ðP
ð ×)Ñ)¨DÑ0ðP
ð ×#Ñ# dÑ*ð	P
ð
 Ÿ™ tÑ+ðP
ð ×&Ñ&¨Ñ-ðP
ð ˜D‘[ðP
ð Ð+Ñ,ðP
ð 
�Ñ	ôP
ó ó öP
r*   r{  c                   ó  ^ • \ rS rSr% \\S'   Sr\\S.r	S\4U 4S jjr
S\R                  4S jrS r\\   SS
\R$                  S	-  S\R$                  S	-  S\R$                  S	-  S\\   S\\-  4
S jj5       5       rSrU =r$ )ÚClapTextModelWithProjectioniV  ru   r›  rœ  c                 ó„   >• [         TU ]  U5        [        U5      U l        [	        U5      U l        U R                  5         g rg   )r|   r}   rš  r¸  râ  r¹  r�  rý  s     €r(   r}   Ú$ClapTextModelWithProjection.__init___  s3   ø€ Ü‰Ñ˜Ô Ü'¨Ó/ˆŒÜ2°6Ó:ˆÔà�‰Õr*   r=   c                 óB   • U R                   R                  R                  $ rg   ©r¸  r  rõ  ro   s    r(   r�  Ú0ClapTextModelWithProjection.get_input_embeddingsf  s   € Ø�‰×)Ñ)×9Ñ9Ð9r*   c                 ó8   • XR                   R                  l        g rg   rÙ  r¦  s     r(   r§  Ú0ClapTextModelWithProjection.set_input_embeddingsi  s   € Ø5:�‰×"Ñ"Õ2r*   Nrÿ  rá   rú  r  c                 ó¼   • U R                   " SUUUS.UD6nUR                  nU R                  U5      n[        UUR                  UR
                  UR                  S9$ )aª  
Examples:

```python
>>> from transformers import AutoTokenizer, ClapTextModelWithProjection

>>> model = ClapTextModelWithProjection.from_pretrained("laion/clap-htsat-unfused")
>>> tokenizer = AutoTokenizer.from_pretrained("laion/clap-htsat-unfused")

>>> inputs = tokenizer(["a sound of a cat", "a sound of a dog"], padding=True, return_tensors="pt")

>>> outputs = model(**inputs)
>>> text_embeds = outputs.text_embeds
```r¾  )rL   rM   r"   rN   rO   )r¸  rÎ  r¹  rJ   rM   r"   rN   )rp   rÿ  rá   rú  r  rÁ  rj  rL   s           r(   r”   Ú#ClapTextModelWithProjection.forwardl  sr   € ð. 48·?²?ð 4
ØØ)Ø%ñ4
ð ñ	4
ˆð %×2Ñ2ˆØ×*Ñ*¨=Ó9ˆä"Ø#Ø*×<Ñ<Ø&×4Ñ4Ø#×.Ñ.ñ	
ð 	
r*   )r¸  r¹  )NNN)rP   rQ   rR   rS   r   rV   r…  rQ  r#  r°  r}   r   rˆ  r�  r§  r   r   rA   r  r   r   rW   rJ   r”   rX   r—   r˜   s   @r(   rÕ  rÕ  V  s¼   ø‡ àÓØ Ðà&Ø+ñÐð
˜~÷ ð: b§i¡iô :ò;ð Øð *.Ø.2Ø,0ñ	#
à—<‘< $Ñ&ð#
ð Ÿ™ tÑ+ð#
ð —l‘l TÑ)ð	#
ð
 Ð+Ñ,ð#
ð 
Ð$Ñ	$ô#
ó ó ö#
r*   rÕ  c                   óÜ   ^ • \ rS rSr% \\S'   SrSrS\4U 4S jjrS\	R                  4S jr\\  SS\R                  S-  S	\R                   S-  S
\\   S\\-  4S jj5       5       rSrU =r$ )ÚClapAudioModelWithProjectioni”  ru   rÐ  ro  c                 ó„   >• [         TU ]  U5        [        U5      U l        [	        U5      U l        U R                  5         g rg   )r|   r}   rŠ  rº  râ  r»  r�  rý  s     €r(   r}   Ú%ClapAudioModelWithProjection.__init__š  s4   ø€ Ü‰Ñ˜Ô Ü)¨&Ó1ˆÔÜ 3°FÓ ;ˆÔà�‰Õr*   r=   c                 óV   • U R                   R                  R                  R                  $ rg   )rº  rŒ  r­  r©   ro   s    r(   r�  Ú1ClapAudioModelWithProjection.get_input_embeddings¡  s    € Ø×Ñ×-Ñ-×9Ñ9×>Ñ>Ð>r*   NrÉ  r  c                 ó¶   • U R                   " SUUS.UD6nU R                  UR                  5      n[        UUR                  UR
                  UR                  S9$ )aý  
is_longer (`torch.FloatTensor`, of shape `(batch_size, 1)`, *optional*):
    Whether the audio clip is longer than `max_length`. If `True`, a feature fusion will be enabled to enhance
    the features.

Examples:

```python
>>> from datasets import load_dataset
>>> from transformers import ClapAudioModelWithProjection, ClapProcessor

>>> model = ClapAudioModelWithProjection.from_pretrained("laion/clap-htsat-fused")
>>> processor = ClapProcessor.from_pretrained("laion/clap-htsat-fused")

>>> dataset = load_dataset("hf-internal-testing/ashraq-esc50-1-dog-example")
>>> audio_sample = dataset["train"]["audio"][0]["array"]

>>> inputs = processor(audio=audio_sample, return_tensors="pt")
>>> outputs = model(**inputs)
>>> audio_embeds = outputs.audio_embeds
```r“  )r\   rM   rN   r"   rO   )rº  r»  rÎ  rZ   rM   rN   r"   )rp   rÐ  rÉ  r  rÆ  r\   s         r(   r”   Ú$ClapAudioModelWithProjection.forward¤  sl   € ð: 59×4DÒ4Dð 5
Ø)Øñ5
ð ñ5
ˆð ×,Ñ,¨]×-HÑ-HÓIˆä#Ø%Ø+×=Ñ=Ø$×/Ñ/Ø'×5Ñ5ñ	
ð 	
r*   )rº  r»  r–  )rP   rQ   rR   rS   r   rV   r—  r…  r}   r   rˆ  r�  r   r   rA   rU   r˜  r   r   rW   rZ   r”   rX   r—   r˜   s   @r(   rà  rà  ”  sœ   ø‡ àÓØ&€OØÐð˜÷ ð? b§i¡iô ?ð Øð 48Ø-1ñ(
à×)Ñ)¨DÑ0ð(
ð ×#Ñ# dÑ*ð(
ð Ð+Ñ,ð	(
ð
 
Ð%Ñ	%ô(
ó ó ö(
r*   rà  )r{  rm  rš  rÕ  rŠ  rà  rF  )[rT   rÌ   rç   Úcollections.abcr   Údataclassesr   Útypingr   rA   Útorch.nn.functionalr   rD   r¿  Ú r   rv  Úactivationsr	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_clapr   r   r   Ú
get_loggerrP   Úloggerr)   r9   r;   r  rG   rJ   rZ   r^   rˆ  rs   rš   rÂ   r  r  r  r+  r2  rI  r‡  r›  r¨  râ  rí  rG  r!  r#  r2  r=  rD  rK  rQ  r\  rd  rm  rŠ  rš  r{  rÕ  rà  Ú__all__rO   r*   r(   Ú<module>rú     s   ðñ ã Û Ý $Ý !Ý ã ß Ð Ý å &Ý !Ý 6Ý 9÷÷ GÝ &Ý 6ß j× jÝ 7Ý 5ß KÑ Kð 
×	Ò	˜HÓ	%€òò"ò*ð*7˜UŸ\™\ð 7¨e¯l©lô 7ñ
 ðñð
 ô	<˜+ó 	<ó óð	<ñ ðñð
 ô	<˜;ó 	<ó óð	<ð Ø
ô_�ó _ó ó ð_ôB%˜Ÿ	™	ô %ôP_˜"Ÿ)™)ô _ôFZ'˜RŸY™Yô Z'ô|
˜"Ÿ)™)ô 
ô˜Ÿ™ô ô&˜BŸI™Iô ô 	�b—i‘iô 	ô%�2—9‘9ô %ô2t�R—Y‘Yô tôp4Ð/ô 4ôp%˜BŸI™Iô %ôPv
�r—y‘yô v
ôr˜"Ÿ)™)ô ô&c8˜Ÿ™ô c8ð\ ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð õ%ô.3)˜BŸI™Iô 3)ôn˜Ÿ™ô ô˜Ÿ	™	ô ô.˜2Ÿ9™9ô ô �R—Y‘Yô ôÐ.ô ôD
�b—i‘iô 
ô4�R—Y‘Yô ð ô`˜/ó `ó ð`ô@/
Ð(ô /
ñd ðñôR
Ð'ó R
óðR
ðj ô{
Ð#ó {
ó ð{
ð| ô:
Ð"5ó :
ó ð:
ðz ô9
Ð#6ó 9
ó ð9
òx�r*   