Ë
    ÛÓ^j¨! ã                   óð  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	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mZ ddlmZmZ ddlmZ ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/  e&j`                  e1«      Z2d„ Z3d„ Z4d„ Z5de	jl                  de	jl                  fd„Z7 e$d¬«      e G d„ de"«      «       «       Z8 e$d¬«      e G d „ d!e"«      «       «       Z9e$e G d"„ d#e"«      «       «       Z: G d$„ d%ejv                  «      Z< G d&„ d'ejv                  «      Z= G d(„ d)ejv                  «      Z> G d*„ d+ejv                  «      Z? G d,„ d-ejv                  «      Z@ G d.„ d/ejv                  «      ZA G d0„ d1ejv                  «      ZB G d2„ d3ejv                  «      ZC G d4„ d5ejv                  «      ZD G d6„ d7e«      ZE G d8„ d9ejv                  «      ZF G d:„ d;ejv                  «      ZG G d<„ d=ejv                  «      ZH G d>„ d?ejv                  «      ZI	 dfd@ejv                  dAe	jl                  dBe	jl                  dCe	jl                  dDe	jl                  dz  dEeJdFeJfdG„ZK G dH„ dIejv                  «      ZL G dJ„ dKejv                  «      ZM G dL„ dMejv                  «      ZN G dN„ dOejv                  «      ZO G dP„ dQejv                  «      ZP G dR„ dSe«      ZQ G dT„ dUejv                  «      ZR G dV„ dWejv                  «      ZSe$ G dX„ dYe«      «       ZT G dZ„ d[eT«      ZU e$d\¬«       G d]„ d^eT«      «       ZVe$ G d_„ d`eT«      «       ZWe$ G da„ dbeT«      «       ZXe$ G dc„ ddeT«      «       ZYg de¢ZZy)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                 ó”   — | j                   \  }}}| dd…dd…ddd…f   j                  dd|d«      }|j                  |||z  |«      }|S )ae  
    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         úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/clap/modeling_clap.pyÚinterpolater)   /   sX   € ð .;×-@Ñ-@Ñ*€Z�˜kØša¢ Dª!˜mÑ,×3Ñ3°A°q¸%ÀÓC€IØ×!Ñ! *¨k¸EÑ.AÀ;ÓO€IØÐó    c                 óÌ   — | j                   \  }}}}| j                  |||z  |||z  ||«      } | j                  dddddd«      j                  «       j                  d|||«      }|S )aR  
    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   @   s}   € ð /<×.AÑ.AÑ+€J�˜˜|à!×&Ñ&Ø�F˜kÑ)¨;¸ÀÑ8LÈkÐ[gó€Mð ×#Ñ# A q¨!¨Q°°1Ó5×@Ñ@ÓB×GÑGÈÈKÐYdÐfrÓs€GØ€Nr*   c                 óÈ   — | j                   d   }| j                  d||z  ||z  |||«      } | j                  dddddd«      j                  «       j                  d|||«      } | S )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   sn   € ð —=‘= Ñ$€LØ�l‰l˜2˜v¨Ñ4°e¸{Ñ6JÈKÐYdÐfrÓs€GØ�o‰o˜a  A q¨!¨QÓ/×:Ñ:Ó<×AÑAÀ"ÀfÈeÐUaÓb€GØ€Nr*   ÚlogitsÚreturnc                 ó–   — t        j                  t        | «      | j                  ¬«      }t        j
                  j                  | |«      S )N©Údevice)ÚtorchÚarangeÚlenr@   r   Ú
functionalÚcross_entropy)r<   Úlabelss     r(   Úcontrastive_lossrG   j   s1   € Ü�\‰\œ#˜f›+¨f¯m©mÔ<€FÜ�=‰=×&Ñ& v¨vÓ6Ð6r*   ze
    Base class for text model's outputs that also contains a pooling of the last hidden states.
    )Úcustom_introc                   óÆ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
ej                  df   dz  ed<   dZe
ej                  df   dz  ed<   y)ÚClapTextModelOutputzö
    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__Ú__doc__rK   rA   ÚFloatTensorÚ__annotations__rL   r"   ÚtuplerM   © 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                   óÆ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
ej                  df   dz  ed<   dZe
ej                  df   dz  ed<   y)ÚClapAudioModelOutputz¯
    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_embedsrL   .r"   rM   )rN   rO   rP   rQ   rX   rA   rR   rS   rL   r"   rT   rM   rU   r*   r(   rW   rW   ‚   sr   … ñð
 .2€L�%×#Ñ# dÑ*Ó1Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r*   rW   c                   ó  — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	ej                  dz  ed<   dZ
ej                  dz  ed<   dZej                  dz  ed<   dZeed<   dZeed	<   d
ee   fd„Zy)Ú
ClapOutputa¦  
    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_textrK   rX   Útext_model_outputÚaudio_model_outputr=   c                 óB   — t        d„ | j                  «       D «       «      S )Nc              3   ó`   K  — | ]&  }t        |t        «      r|j                  «       n|–— Œ( y ­w©N)Ú
isinstancer   Úto_tuple)Ú.0Úvs     r(   ú	<genexpr>z&ClapOutput.to_tuple.<locals>.<genexpr>´   s$   è ø€ Ò^È1¤Z°´;Ô%?�Q—Z‘Z”\ÀQÓFÑ^ùs   ‚,.)rT   Úvalues©Úselfs    r(   rd   zClapOutput.to_tuple³   s   € ÜÑ^ÐPT×P[ÑP[ÓP]Ô^Ó^Ð^r*   )rN   rO   rP   rQ   r[   rA   rR   rS   r\   r]   rK   rX   r^   r   r_   rT   r   rd   rU   r*   r(   rZ   rZ   ”   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*   rZ   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )ÚClapAudioAFFBlockz�
    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         ‰| �  «        |j                  }|j                  }t	        ||z  «      }t        j                  t        j                  ||ddd¬«      t        j                  |«      t        j                  d¬«      t        j                  ||ddd¬«      t        j                  |«      «      | _
        t        j                  t        j                  d«      t        j                  ||ddd¬«      t        j                  |«      t        j                  d¬«      t        j                  ||ddd¬«      t        j                  |«      «      | _        t        j                  «       | _        y )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)rj   rm   ÚchannelsÚdownsize_ratioÚinter_channelsÚ	__class__s        €r(   ru   zClapAudioAFFBlock.__init__¾   s  ø€ Ü‰ÑÔØ×2Ñ2ˆØ×+Ñ+ˆÜ˜X¨Ñ7Ó8ˆäŸ™Ü�I‰I�h ¸AÀaÐQRÔSÜ�N‰N˜>Ó*Ü�G‰G˜DÔ!Ü�I‰I�n h¸AÀaÐQRÔSÜ�N‰N˜8Ó$ó
ˆŒô Ÿ-™-Ü× Ñ  Ó#Ü�I‰I�h ¸AÀaÐQRÔSÜ�N‰N˜>Ó*Ü�G‰G˜DÔ!Ü�I‰I�n h¸AÀaÐQRÔSÜ�N‰N˜8Ó$ó
ˆŒô —z‘z“|ˆ�r*   c                 ó    — ||z   }| j                  |«      | j                  |«      z   }| j                  |«      }d|z  |z  d|z  d|z
  z  z   }|S )Nr,   r   )r}   r   r�   )rj   r"   ÚresidualÚattention_inputÚfused_layer_outputÚoutputs         r(   ÚforwardzClapAudioAFFBlock.forwardÖ   sb   € Ø'¨(Ñ2ˆà!Ÿ^™^¨OÓ<¸t¿¹ÈÓ?_Ñ_ÐØ!Ÿ\™\Ð*<Ó=Ðà�]Ñ"Ð%7Ñ7¸!¸h¹,È!ÐN`ÑJ`Ñ:aÑaˆØˆr*   ©rN   rO   rP   rQ   r   ru   r‹   Ú__classcell__©r…   s   @r(   rl   rl   ¸   s   ø„ ñð
$˜õ $ö0r*   rl   c                   ó0   ‡ — e Zd ZdZdefˆ fd„Zdd„Zˆ xZS )ÚClapAudioPatchEmbedzŠ
    This module converts the hidden states reshaped as an image to patch embeddings ready to be passed to the
    Transformer block.
    rm   c                 óª  •— t         ‰| �  «        t        |j                  t        «      r|j                  |j                  fn|j                  }t        |j
                  t        «      r|j
                  |j
                  fn|j
                  }t        |j                  t        «      r|j                  |j                  fn|j                  }|| _        || _        |d   |d   z  |d   |d   z  f| _        | j                  d   | j                  d   z  | _	        |j                  | _        |j                  | _        |d   |d   z
  dz  |d   |d   z
  dz  f}| j                  r|j                  dk(  rdnd}t        j                  |j                   |z  |j"                  |||¬«      | _        |j&                  rt        j(                  |j"                  «      nt        j*                  «       | _        | j                  rZt/        |«      | _        t        j                  |j                   |j"                  |d   |d   dz  f|d   |d   dz  f|¬«      | _        y y )Nr   r   r,   Úchannel_mapr-   ro   r   )rt   ru   rc   Ú	spec_sizerx   Ú
patch_sizeÚpatch_strideÚimg_sizeÚ	grid_sizeÚnum_patchesÚflatten_patch_embedsÚflattenÚenable_fusionÚfusion_typer   rz   Úpatch_embed_input_channelsrv   ÚprojÚenable_patch_layer_normÚ	LayerNormÚIdentityÚnormrl   Úfusion_modelÚ
mel_conv2d)rj   rm   r–   r”   r•   rr   Úscale_factorr…   s          €r(   ru   zClapAudioPatchEmbed.__init__æ   s+  ø€ Ü‰ÑÔÜ;EÀf×FVÑFVÔX[Ô;\�F×$Ñ$ f×&6Ñ&6Ñ7Ðbh×brÑbrˆä6@À×ARÑARÔTWÔ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                 óì  — | j                   �r°|d d …dd…d d …d d …f   }|j                  \  }}}}|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d�	«      ‚| j	                  |«      }|j                  d«      }t        |«      dkD  �r||dd …d d …d d …f   j                  «       }	|	j                  \  }}}}|	j                  ||z  d||«      }	| j                  |	«      }	|	j                  \  }
}}}|	j                  |||||«      }	|	j                  d«      j                  «       j                  d	«      }	|	j                  d«      }t        j                  j                  j                  |	d||z
  fd
d«      }	| j!                  ||   |	«      ||<   |}nx|j                  \  }
}
}}|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d�	«      ‚| j	                  |«      }| j                  r!|j                  d«      j#                  dd«      }| j%                  |«      }|S )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¢   )rj   r"   Úis_longer_idxÚglobal_hidden_statesr$   r7   r5   r6   Úoutput_widthÚlocal_hidden_statesÚ_ÚfeaturesÚlocal_widths                r(   r‹   zClapAudioPatchEmbed.forward  s»  € Ø×Óà#0²°A°a°CººA°Ñ#>Ð ð 7K×6PÑ6PÑ3ˆJ˜ f¨eà˜Ÿ™ qÑ)Ò)¨U°d·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°MÀ1Á2ÂqÊ!Ð4KÑ&L×&WÑ&WÓ&YÐ#Ø:M×:SÑ:SÑ7�
˜L¨&°%Ø&9×&>Ñ&>¸zÈLÑ?XÐZ[Ð]cÐejÓ&kÐ#à&*§o¡oÐ6IÓ&JÐ#à-@×-FÑ-FÑ*��8˜V UØ&9×&>Ñ&>¸zÈ<ÐYaÐciÐkpÓ&qÐ#Ø&9×&AÑ&AÀ/Ó&R×&]Ñ&]Ó&_×&gÑ&gÐhiÓ&jÐ#à1×6Ñ6°rÓ:�Ü&+§h¡h×&9Ñ&9×&=Ñ&=Ø'¨!¨\¸KÑ-GÐ)HÈ*ÐVWó'Ð#ð 7;×6GÑ6GØ(¨Ñ7Ð9Ló7Ð$ ]Ñ3ð 1‰Mà"/×"5Ñ"5ÑˆAˆq�&˜%Ø˜Ÿ™ qÑ)Ò)¨U°d·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*   rb   rŒ   rŽ   s   @r(   r�   r�   à   s   ø„ ñð
(˜õ (÷T/r*   r�   c            
       ó�   ‡ — e Zd Zˆ fd„Z	 	 d	dej
                  dej                  dz  dedz  deej
                     fd„Z	d„ Z
ˆ xZS )
ÚClapAudioSelfAttentionc                 ó¼  •— t         ‰| �  «        ||z  dk7  rt        d|› d|› d�«      ‚|| _        t	        ||z  «      | _        | j                  | j
                  z  | _        t        |t        j                  j                  «      r|n||f| _        t        j                  t        j                  d| j                  d   z  dz
  d| j                  d   z  dz
  z  |«      «      | _        | j#                  d| j%                  «       «       t        j&                  | j                  | j                  |j(                  ¬«      | _        t        j&                  | j                  | j                  |j(                  ¬«      | _        t        j&                  | j                  | j                  |j(                  ¬«      | _        t        j0                  |j2                  «      | _        y )	Nr   úThe hidden size (ú6) is not a multiple of the number of attention heads (ú)r,   r   Úrelative_position_index©Úbias)rt   ru   r©   Únum_attention_headsrx   Úattention_head_sizeÚall_head_sizerc   ÚcollectionsÚabcÚIterabler4   r   Ú	ParameterrA   ÚzerosÚrelative_position_bias_tableÚregister_bufferÚcreate_relative_position_indexÚLinearÚqkv_biasÚqueryÚkeyÚvalueÚDropoutÚattention_probs_dropout_probÚdropout©rj   rm   ÚdimÚ	num_headsr4   r…   s        €r(   ru   zClapAudioSelfAttention.__init__D  sˆ  ø€ Ü‰ÑÔØ�‰?˜aÒÜØ# C 5Ð(^Ð_hÐ^iÐijÐkóð ð $-ˆÔ Ü#& s¨Y¡Ó#7ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä% k´;·?±?×3KÑ3KÔL‰KÐS^Ð`kÐRlð 	Ôô -/¯L©LÜ�K‰K˜˜T×-Ñ-¨aÑ0Ñ0°1Ñ4¸¸T×=MÑ=MÈaÑ=PÑ9PÐSTÑ9TÑUÐW`Óaó-
ˆÔ)ð 	×ÑÐ6¸×8[Ñ8[Ó8]Ô^ä—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                 ó€  — |j                   \  }}}||d| j                  f}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
t        j                  ||	j	                  dd«      «      }|t        j                  | j                  «      z  }| j                  | j                  j                  d«         }|j                  | j                  d   | j                  d   z  | j                  d   | j                  d   z  d«      }|j                  ddd«      j                  «       }||j!                  d«      z   }|�r|j                   d   }|j                  ||z  || j"                  ||«      }||j!                  d«      j!                  d«      z   }|j                  d| j"                  ||«      }t$        j&                  j)                  |d¬«      }| j+                  |«      }t        j                  ||
«      }|j                  dddd«      j                  «       }|j-                  «       d d | j.                  fz   }|j                  |«      }|r||f}|S |f}|S )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¿   )rj   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‹   zClapAudioSelfAttention.forward^  s¶  € ð )6×(;Ñ(;Ñ%ˆ
�C˜Ø" C¨¨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ˆô !Ÿ<™<¨°Y×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ÐØ+Ð.D×.NÑ.NÈqÓ.QÑQÐàÐ%à'×-Ñ-¨aÑ0ˆJØ/×4Ñ4Ø˜jÑ(¨*°d×6NÑ6NÐPSÐUXó Ðð  0°.×2JÑ2JÈ1Ó2M×2WÑ2WÐXYÓ2ZÑZÐØ/×4Ñ4°R¸×9QÑ9QÐSVÐX[Ó\Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆäŸ™ _°kÓ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                 ó†  — t        j                  | j                  d   «      }t        j                  | j                  d   «      }t        j                  t        j                  ||gd¬«      «      }t        j
                  |d«      }|d d …d d …d f   |d d …d d d …f   z
  }|j                  ddd«      j                  «       }|d d …d d …dfxx   | j                  d   dz
  z  cc<   |d d …d d …dfxx   | j                  d   dz
  z  cc<   |d d …d d …dfxx   d| j                  d   z  dz
  z  cc<   |j                  d«      }|S )Nr   r   Úij)Úindexingr,   r/   )	rA   rB   r4   ÚstackÚmeshgridrš   r2   r3   Úsum)rj   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsrº   s          r(   rÇ   z5ClapAudioSelfAttention.create_relative_position_index‘  s-  € ä—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—‘œUŸ^™^¨X°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*   ©NF)rN   rO   rP   ru   rA   ÚTensorrR   ÚboolrT   r‹   rÇ   r�   rŽ   s   @r(   rµ   rµ   C  s^   ø„ ôGð: 48Ø).ñ	1à—|‘|ð1ð ×)Ñ)¨DÑ0ð1ð   $™;ð	1ð
 
ˆu�|‰|Ñ	ó1öf'r*   rµ   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚClapAudioSelfOutputc                 ó    •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |j                  «      | _        y rb   )rt   ru   r   rÈ   ÚdenserÍ   rÎ   rÏ   ©rj   rm   rÑ   r…   s      €r(   ru   zClapAudioSelfOutput.__init__¢  s6   ø€ Ü‰ÑÔÜ—Y‘Y˜s CÓ(ˆŒ
Ü—z‘z &×"EÑ"EÓFˆ�r*   r"   Úinput_tensorr=   c                 óJ   — | j                  |«      }| j                  |«      }|S rb   ©rù   rÏ   ©rj   r"   rû   s      r(   r‹   zClapAudioSelfOutput.forward§  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr*   ©rN   rO   rP   ru   rA   rô   r‹   r�   rŽ   s   @r(   r÷   r÷   ¡  s2   ø„ ôGð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r*   r÷   c            
       óŠ   ‡ — e Zd Zˆ fd„Z	 	 ddej
                  dej                  dz  dedz  deej
                     fd„Z	ˆ xZ
S )	ÚClapAudioAttentionc                 ój   •— t         ‰| �  «        t        ||||«      | _        t	        ||«      | _        y rb   )rt   ru   rµ   rj   r÷   rŠ   rÐ   s        €r(   ru   zClapAudioAttention.__init__°  s.   ø€ Ü‰ÑÔÜ*¨6°3¸	À;ÓOˆŒ	Ü)¨&°#Ó6ˆ�r*   Nr"   rÓ   rÔ   r=   c                 óh   — | j                  |||«      }| j                  |d   |«      }|f|dd  z   }|S )Nr   r   ©rj   rŠ   )rj   r"   rÓ   rÔ   Úself_outputsÚattention_outputrç   s          r(   r‹   zClapAudioAttention.forwardµ  sE   € ð —y‘y °Ð@QÓRˆØŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr*   ró   )rN   rO   rP   ru   rA   rô   rR   rõ   rT   r‹   r�   rŽ   s   @r(   r  r  ¯  sW   ø„ ô7ð 48Ø).ñ		à—|‘|ð	ð ×)Ñ)¨DÑ0ð	ð   $™;ð		ð
 
ˆu�|‰|Ñ	÷	r*   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚClapAudioIntermediatec                 ó  •— t         ‰| �  «        t        j                  |t	        |j
                  |z  «      «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rb   )rt   ru   r   rÈ   rx   Ú	mlp_ratiorù   rc   Ú
hidden_actÚstrr	   Úintermediate_act_fnrú   s      €r(   ru   zClapAudioIntermediate.__init__Ã  sa   ø€ Ü‰ÑÔÜ—Y‘Y˜s¤C¨×(8Ñ(8¸3Ñ(>Ó$?Ó@ˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r*   r"   r=   c                 óJ   — | j                  |«      }| j                  |«      }|S rb   ©rù   r  ©rj   r"   s     r(   r‹   zClapAudioIntermediate.forwardË  ó&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr*   rÿ   rŽ   s   @r(   r  r  Â  ó#   ø„ ô9ð U§\¡\ð °e·l±l÷ r*   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚClapAudioOutputc                 óÌ   •— t         ‰| �  «        t        j                  t	        |j
                  |z  «      |«      | _        t        j                  |j                  «      | _	        y rb   )
rt   ru   r   rÈ   rx   r
  rù   rÍ   Úhidden_dropout_probrÏ   rú   s      €r(   ru   zClapAudioOutput.__init__Ó  sF   ø€ Ü‰ÑÔÜ—Y‘Yœs 6×#3Ñ#3°cÑ#9Ó:¸CÓ@ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r*   r"   r=   c                 óJ   — | j                  |«      }| j                  |«      }|S rb   rý   r  s     r(   r‹   zClapAudioOutput.forwardØ  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr*   rÿ   rŽ   s   @r(   r  r  Ò  s#   ø„ ô>ð
 U§\¡\ð °e·l±l÷ r*   r  c                   ór   ‡ — e Zd ZdZd	deddfˆ fd„Zdej                  dej                  fd„Zde	fd„Z
ˆ xZS )
ÚClapDropPathzÏ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                 ó0   •— t         ‰| �  «        || _        y rb   )rt   ru   r  )rj   r  r…   s     €r(   ru   zClapDropPath.__init__æ  s   ø€ Ü‰ÑÔØ"ˆ�r*   r"   c                 óP  — | j                   dk(  s| j                  s|S d| j                   z
  }|j                  d   fd|j                  dz
  z  z   }t	        j
                  ||j                  |j                  ¬«      }t	        j                  ||z   «      }|j                  |«      |z  S )Nç        r   r   )r   ©Údtyper@   )
r  Útrainingr   ÚndimrA   Úrandr  r@   ÚfloorÚdiv)rj   r"   Ú	keep_probr   Úrandom_tensors        r(   r‹   zClapDropPath.forwardê  s—   € Ø�>‰>˜SÒ ¨¯ªØ Ð Ø˜Ÿ™Ñ&ˆ	Ø×$Ñ$ QÑ'Ð)¨D°M×4FÑ4FÈÑ4JÑ,KÑKˆÜŸ
™
 5°×0CÑ0CÈM×L`ÑL`ÔaˆÜŸ™ M°IÑ$=Ó>ˆØ× Ñ  Ó+¨mÑ;Ð;r*   c                 ó    — d| j                   › �S )Nzp=)r  ri   s    r(   Ú
extra_reprzClapDropPath.extra_repró  s   € Ø�D—N‘NÐ#Ð$Ð$r*   ©r  )rN   rO   rP   rQ   Úfloatru   rA   rô   r‹   r  r(  r�   rŽ   s   @r(   r  r  ß  sB   ø„ ññ# %ð #°$õ #ð< U§\¡\ð <°e·l±ló <ð%˜C÷ %r*   r  c                   ó°   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd„ Z	 	 ddej                  de	e
e
f   dedz  d	edz  d
e	ej                  ej                  f   f
d„Zˆ xZS )ÚClapAudioLayerc                 óì  •— t         ‰| �  «        |j                  | _        || _        |j                  | _        || _        t        j                  ||j                  ¬«      | _	        t        |||| j                  ¬«      | _        |dkD  rt        |«      nt        j                  «       | _        t        j                  ||j                  ¬«      | _        t!        ||«      | _        t%        ||«      | _        y )N©Úeps)r4   r  )rt   ru   Úchunk_size_feed_forwardÚ
shift_sizer4   Úinput_resolutionr   r    Úlayer_norm_epsÚlayernorm_beforer  Ú	attentionr  r¡   Ú	drop_pathÚlayernorm_afterr  Úintermediater  rŠ   )rj   rm   rÑ   r2  rÒ   Údrop_path_rater1  r…   s          €r(   ru   zClapAudioLayer.__init__ù  sÀ   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$Ø$ˆŒØ!×-Ñ-ˆÔØ 0ˆÔÜ "§¡¨S°f×6KÑ6KÔ LˆÔÜ+¨F°C¸ÐPT×P`ÑP`ÔaˆŒØ9GÈ#Ò9Mœ nÔ5ÔSU×S^ÑS^ÓS`ˆŒÜ!Ÿ|™|¨C°V×5JÑ5JÔKˆÔÜ1°&¸#Ó>ˆÔÜ% f¨cÓ2ˆ�r*   c                 ó  — t        |«      | j                  k  rgt        d«      | _        t        j
                  j                  «       r(t	        j                   t	        j                  |«      «      n
t        |«      | _        y y ©Nr   )Úminr4   r   r1  rA   ÚjitÚ
is_tracingÚtensor)rj   r2  s     r(   Úset_shift_and_window_sizez(ClapAudioLayer.set_shift_and_window_size  s\   € ÜÐÓ  D×$4Ñ$4Ò4ä'¨›lˆDŒOä=B¿Y¹Y×=QÑ=QÔ=S”—	‘	œ%Ÿ,™,Ð'7Ó8Ô9ÔY\Ð]mÓYnð Õð 5r*   c                 óì  — | j                   dk  ryt        j                  ||¬«      }t        j                  ||¬«      }||| j                  z
  k\  j	                  «       ||| j                   z
  k\  j	                  «       z   }||| j                  z
  k\  j	                  «       ||| j                   z
  k\  j	                  «       z   }|ddd…ddf   dz  |dddd…df   z   j                  |«      }	t        |	| j                  «      }
|
j                  d| j                  | j                  z  «      }
|
j                  d«      |
j                  d«      z
  }|j                  |dk7  d«      j                  |dk(  d	«      }|S )
uµ  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Àr  )
r1  rA   rB   r4   ÚlongÚtor9   r1   rÛ   Úmasked_fill)rj   r5   r6   r  r@   Úh_idxÚw_idxÚh_regionÚw_regionÚimg_maskÚmask_windowsÚ	attn_masks               r(   Úget_attn_maskzClapAudioLayer.get_attn_mask  si  € ð �?‰?˜aÒØÜ—‘˜V¨FÔ3ˆÜ—‘˜U¨6Ô2ˆØ˜V d×&6Ñ&6Ñ6Ñ6×<Ñ<Ó>À%È6ÐTX×TcÑTcÑKcÑBc×AiÑAiÓAkÑkˆØ˜U 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                 óþ   — | j                   || j                   z  z
  | j                   z  }| j                   || j                   z  z
  | j                   z  }ddd|d|f}t        j                  j                  ||«      }||fS r;  )r4   r   rD   r«   )rj   r"   r5   r6   Ú	pad_rightÚ
pad_bottomÚ
pad_valuess          r(   Ú	maybe_padzClapAudioLayer.maybe_pad'  s�   € Ø×%Ñ%¨°×0@Ñ0@Ñ(@Ñ@ÀD×DTÑDTÑTˆ	Ø×&Ñ&¨°$×2BÑ2BÑ)BÑBÀd×FVÑFVÑVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
ÜŸ™×)Ñ)¨-¸ÓDˆØ˜jÐ(Ð(r*   r"   Úinput_dimensionsrÔ   NÚalways_partitionr=   c                 óÈ  — |s| j                  |«       n	 |\  }}|j                  «       \  }}}	|}
| j                  |«      }|j                  ||||	«      }| j	                  |||«      \  }}|j
                  \  }}}}| j                  dkD  r1t        j                  || j                   | j                   fd¬«      }n|}t        || j                  «      }|j                  d| j                  | j                  z  |	«      }| j                  |||j                  |j                  ¬«      }| j                  |||¬«      }|d   }|j                  d| j                  | j                  |	«      }t        || j                  ||«      }| j                  dkD  r/t        j                  || j                  | j                  fd¬«      }n|}|d   dkD  xs |d   dkD  }|r|d d …d |…d |…d d …f   j!                  «       }|j                  |||z  |	«      }|
| j#                  |«      z   }| j%                  |«      }| j'                  |«      }|| j)                  |«      z   }|r	||d	   f}|S |f}|S )
Nr   )r   r,   )ÚshiftsÚdimsr/   r  )rÔ   r   r.   r   )r@  rª   r4  r1   rQ  r   r1  rA   Úrollr9   r4   rL  r  r@   r5  r;   r3   r6  r7  r8  rŠ   )rj   r"   rR  rÔ   rS  r5   r6   r$   r±   r‚   ÚshortcutrP  Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsrK  Úattention_outputsr  Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss                           r(   r‹   zClapAudioLayer.forward.  sš  € ñ  Ø×*Ñ*Ð+;Õ<àØ(‰ˆ�Ø"/×"4Ñ"4Ó"6Ñˆ
�A�xØ ˆà×-Ñ-¨mÓ<ˆà%×*Ñ*¨:°v¸uÀhÓOˆð %)§N¡N°=À&È%Ó$PÑ!ˆ�zà&3×&9Ñ&9Ñ#ˆˆ:�y !à�?‰?˜QÒÜ$)§J¡J¨}ÀtÇÁÐ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ÐZcÓ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°:¸vÈ¹~ÈxÓXÐà  4§>¡>Ð2CÓ#DÑDˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ$ t§{¡{°<Ó'@Ñ@ˆá@Q˜Ð'8¸Ñ';Ð<ˆØÐð YeÐWfˆØÐr*   )r  r   ©FF)rN   rO   rP   ru   r@  rL  rQ  rA   rô   rT   rx   rõ   r‹   r�   rŽ   s   @r(   r,  r,  ø  sz   ø„ õ3òòò2)ð */Ø(-ñ>à—|‘|ð>ð    S ™/ð>ð   $™;ð	>ð
  ™+ð>ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷>r*   r,  c                   ó„   ‡ — e Zd Zˆ fd„Z	 	 d	dej
                  deeef   dedz  dedz  deej
                     f
d„Z	ˆ xZ
S )
ÚClapAudioStagec                 óH  •— t         ‰	| �  «        || _        || _        t	        j
                  t        |«      D �cg c]-  }t        ||||||   |dz  dk(  rdn|j                  dz  ¬«      ‘Œ/ c}«      | _	        |� ||¬«      | _
        d| _        y d | _
        d| _        y c c}w )Nr,   r   )rm   rÑ   r2  rÒ   r9  r1  r×   F)rt   ru   rm   rÑ   r   Ú
ModuleListÚranger,  r4   ÚblocksÚ
downsampleÚpointing)
rj   rm   rÑ   r2  ÚdepthrÒ   r6  rj  Úir…   s
            €r(   ru   zClapAudioStage.__init__q  s®   ø€ Ü‰ÑÔØˆŒØˆŒÜ—m‘mô ˜u›ö
ð ô Ø!ØØ%5Ø'Ø#,¨Q¡<Ø%&¨¡U¨a¢Z™q°f×6HÑ6HÈAÑ6Möò
ó
ˆŒð Ð!Ù(¨SÔ1ˆDŒOð ˆ�ð #ˆDŒOàˆ�ùò'
s   º2Br"   rR  rÔ   NrS  r=   c                 ó  — |\  }}t        | j                  «      D ]  \  }} |||||«      }	|	d   }Œ |}
| j                  �)|dz   dz  |dz   dz  }}||||f}| j                  |
|«      }n||||f}||
|f}|r|	dd  z  }|S )Nr   r   r,   )Ú	enumerateri  rj  )rj   r"   rR  rÔ   rS  r5   r6   rm  Úlayer_modulerb  Ú!hidden_states_before_downsamplingÚheight_downsampledÚwidth_downsampledÚoutput_dimensionsÚstage_outputss                  r(   r‹   zClapAudioStage.forward‹  sÑ   € ð )‰ˆ�Ü(¨¯©Ó5ò 	-‰OˆAˆ|Ù(¨Ð8HÐJ[Ð]mÓnˆMà)¨!Ñ,‰Mð	-ð
 -:Ð)Ø�?‰?Ð&Ø5;¸a±ZÀAÑ4EÈÐPQÉ	ÐVWÑGWÐ 1ÐØ!'¨Ð0BÐDUÐ VÐØ ŸO™OÐ,MÐO_Ó`‰Mà!'¨°¸Ð >Ðà&Ð(IÐK\Ð]ˆáØ˜]¨1¨2Ð.Ñ.ˆMØÐr*   rc  )rN   rO   rP   ru   rA   rô   rT   rx   rõ   r‹   r�   rŽ   s   @r(   re  re  p  sb   ø„ ôð< */Ø(-ñà—|‘|ðð    S ™/ðð   $™;ð	ð
  ™+ðð 
ˆu�|‰|Ñ	÷r*   re  c                   ó²   ‡ — e Zd ZdZdeddfˆ fd„Zdej                  dededej                  fd	„Zdej                  d
e	eef   dej                  fd„Z
ˆ xZS )ÚClapAudioPatchMergingzd
    Patch Merging Layer.

    Args:
        dim (`int`):
            Number of input channels.
    rÑ   r=   Nc                 ó¢   •— t         ‰| �  «        t        j                  d|z  d|z  d¬«      | _        t        j
                  d|z  «      | _        y )Nr-   r,   Fr»   )rt   ru   r   rÈ   Ú	reductionr    r¢   )rj   rÑ   r…   s     €r(   ru   zClapAudioPatchMerging.__init__±  s>   ø€ Ü‰ÑÔÜŸ™ 1 s¡7¨A°©G¸%Ô@ˆŒÜ—L‘L  S¡Ó)ˆ�	r*   Úinput_featurer5   r6   c           
      ó~   — |dz  dk(  s|dz  dk(  r,t         j                  j                  |ddd|dz  d|dz  f«      }|S )zPPad input feature map to be divisible by 2 in both spatial dimensions if needed.r,   r   r   )r   rD   r«   )rj   rz  r5   r6   s       r(   rQ  zClapAudioPatchMerging.maybe_pad¶  sL   € à�Q‰J˜!ŠO ¨¡¨a¢ÜŸM™M×-Ñ-¨m¸aÀÀAÀuÈqÁyÐRSÐU[Ð^_ÑU_Ð=`ÓaˆMØÐr*   rR  c                 óœ  — |\  }}|j                   \  }}}|j                  ||||«      }| j                  |||«      }t        j                  t        d«      D ��	cg c]%  }t        d«      D ]  }	|d d …|	d d…|d d…d d …f   ‘Œ Œ' c}	}d¬«      }|j                  |dd|z  «      }| j                  |«      }| j                  |«      }|S c c}	}w )Nr,   r/   r×   r-   )r   r1   rQ  rA   Úcatrh  r¢   ry  )
rj   rz  rR  r5   r6   r$   rÑ   r7   ÚcolÚrows
             r(   r‹   zClapAudioPatchMerging.forward¼  sÙ   € Ø(‰ˆ�à(5×(;Ñ(;Ñ%ˆ
�C˜à%×*Ñ*¨:°v¸uÀlÓSˆàŸ™ }°f¸eÓDˆäŸ	™	Ü<AÀ!»H×Y°SÔPUÐVWÓPXÒYÈˆ]š1˜c˜f 1˜f c f¨1 fªaÐ/Ó0ÐYÐ0ÓYÐ_aô
ˆð &×*Ñ*¨:°r¸1¸|Ñ;KÓLˆàŸ	™	 -Ó0ˆØŸ™ }Ó5ˆàÐùó Zs   Á*C
)rN   rO   rP   rQ   rx   ru   rA   rô   rQ  rT   r‹   r�   rŽ   s   @r(   rw  rw  ¨  su   ø„ ñð*˜Cð * Dõ *ð
 u§|¡|ð ¸Sð Èð ÐQV×Q]ÑQ]ó ð U§\¡\ð ÀUÈ3ÐPSÈ8Á_ð ÐY^×YeÑYe÷ r*   rw  c                   óž   ‡ — e Zd Zˆ fd„Zd„ Ze	 	 	 	 	 	 ddej                  dz  dedz  dedz  dedz  dedz  d	edz  d
e	e
z  fd„«       Zˆ xZS )ÚClapAudioEncoderc                 ó–  •— t         ‰| �  «        t        |j                  «      | _        || _        t        |«      | _        |j                  | _        | j                  j                  | _	        |j                  | _
        |j                  |j                  z  | _        t        |j                  d| j                  dz
  z  z  «      | _        t!        j"                  d|j$                  t'        |j                  «      d¬«      D �cg c]  }|j)                  «       ‘Œ }}| j                  j*                  }t-        | j                  «      D �cg c]  }|d   d|z  z  |d   d|z  z  f‘Œ c}| _        t1        j2                  t-        | j                  «      D �cg c]ž  }t5        |t        |j                  d|z  z  «      | j.                  |   |j                  |   |j6                  |   |t'        |j                  d | «      t'        |j                  d |dz    «       || j                  dz
  k  rt8        nd ¬«      ‘Œ  c}«      | _        d| _        t1        j>                  |j                  «      | _         t1        jB                  | j                  «      | _"        |j                  | _        t1        jF                  d«      | _$        y c c}w c c}w c c}w )Nr,   r   r   Úcpur?   )rm   rÑ   r2  rl  rÒ   r6  rj  F)%rt   ru   rC   ÚdepthsÚ
num_layersrm   r�   Úpatch_embedr›   r•   r“   Únum_mel_binsÚ
freq_ratiorx   rv   Únum_featuresrA   Úlinspacer9  rí   Úitemr—   rh  Úinput_resolutionsr   rg  re  r½   rw  ÚlayersÚgradient_checkpointingr{   Ú
batch_normr    r¢   ÚAdaptiveAvgPool1dÚavgpool)rj   rm   Úxr9  r—   rm  Úi_layerr…   s          €r(   ru   zClapAudioEncoder.__init__Ñ  sW  ø€ Ü‰ÑÔÜ˜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 q˜!Ÿ&™&�(ÐwˆÐwà×$Ñ$×.Ñ.ˆ	Ü\aÐbf×bqÑbqÓ\rÖ!sÐWX 9¨Q¡<°A°q±DÑ#9¸9ÀQ¹<ÈAÈqÉDÑ;QÒ"RÒ!sˆÔä—m‘mô  % T§_¡_Ó5öð ô Ø!Ü˜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@À4Ç?Á?ÐUVÑCVÒ9VÕ4Ð]aöòó
ˆŒð ',ˆÔ#äŸ.™.¨×)<Ñ)<Ó=ˆŒÜ—L‘L ×!2Ñ!2Ó3ˆŒ	Ø—m‘mˆŒÜ×+Ñ+¨AÓ.ˆ�ùò3 xùò "tùòs   ÄJ<ÅKÆB#Kc                 óŽ  — |j                   \  }}}}t        | j                  | j                  z  «      }| j                  | j                  z  }||kD  s||kD  rt	        d«      ‚||k  r%t
        j                  j                  |||fdd¬«      }||k  r%t
        j                  j                  |||fdd¬«      }|j                   \  }}}	}
|j                  ||| j                  z  |	| j                  z  |
«      }|j                  dddd«      j                  «       }|j                  |||
| j                  z  |	| j                  z  «      }|S )	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   rx   r“   rˆ  r©   r   rD   r)   r!   r2   r3   )rj   Únormalized_input_featuresr±   r%   Úfreq_lengthÚ
spec_widthÚspec_heightÚbatchr‚   ÚtimeÚfreqs              r(   Úreshape_mel2imgz ClapAudioEncoder.reshape_mel2imgù  s`  € ð
 *C×)HÑ)HÑ&ˆˆ1ˆk˜;ä˜Ÿ™¨$¯/©/Ñ9Ó:ˆ
Ø—n‘n¨¯©Ñ7ˆà˜Ò# {°[Ò'@ÜÐ_Ó`Ð`ð ˜Ò#Ü(*¯©×(AÑ(AØ)¨J¸Ð+DÈ9Ðdhð )Bó )Ð%ð ˜Ò$Ü(*¯©×(AÑ(AØ)¨K¸Ð+EÈIÐeið )Bó )Ð%ð '@×&EÑ&EÑ#ˆˆx˜˜tð %>×$EÑ$EØ�8˜dŸo™oÑ-¨t°t·±Ñ/FÈó%
Ð!ð %>×$EÑ$EÀaÈÈAÈqÓ$Q×$\Ñ$\Ó$^Ð!Ø$=×$EÑ$EØ�8˜T D§O¡OÑ3°T¸T¿_¹_Ñ5Ló%
Ð!ð )Ð(r*   NÚ	is_longerrÔ   Úoutput_hidden_statesÚ(output_hidden_states_before_downsamplingrS  Úreturn_dictr=   c                 óJ  — |xs | j                   j                  }|xs | j                   j                  }|j                  dd«      }| j	                  |«      }|j                  dd«      }d }	| j
                  r6|j                  |j                  «      }
t        j                  |
dk(  «      d   }	| j                  |«      }|j                  d   }| j                  ||	«      }|rdnd }|rdnd }|rdnd }| j                  d   }|rE|j                  \  }}} |j                  |g|¢|‘­Ž }|j                  dddd«      }||fz  }||fz  }t!        | j"                  «      D ]Þ  \  }}| j                  |   } |||||«      }|d   }|d   }|d   }|d   |d   f}|rP|rN|j                  \  }}} |j                  |g|d   |d   f¢|‘­Ž }|j                  dddd«      }||fz  }||fz  }nI|rG|sE|j                  \  }}} |j                  |g|¢|‘­Ž }|j                  dddd«      }||fz  }||fz  }|sŒ×||dd  z  }Œà | j%                  |«      }|j                  \  }}}|dt'        | j(                  «      dz
  z  z  | j*                  d   z  }|dt'        | j(                  «      dz
  z  z  | j*                  d   z  }|j                  ddd«      j-                  «       j/                  ||||«      }|j                  \  }}}}|| j0                  z  } |j/                  |||| z  | |«      }|j                  ddddd«      j-                  «       j/                  ||| d«      }| j3                  t        j4                  |d«      «      }!t        j4                  |!d«      }!t7        ||!||¬	«      S )
Nr   r   r   r,   rU   rÖ   r/   r-   )rL   Úpooler_outputr"   rM   )rm   r¡  rÔ   r¬   r�  r›   rC  r@   rA   ÚwhererŸ  r   r†  rŒ  r1   r2   ro  r�  r¢   rC   r„  r•   r3   r!   rˆ  r‘  rš   r   )"rj   Úinput_featuresr   rÔ   r¡  r¢  rS  r£  r˜  Úis_longer_list_idxÚis_longer_listr"   Ú
frames_numÚall_hidden_statesÚall_reshaped_hidden_statesÚall_self_attentionsrR  r$   r±   Úhidden_sizeÚreshaped_hidden_staterm  rp  rb  rq  rt  rL   Ú
n_channelsÚ
freq_shapeÚtemporal_shapeÚn_frequenciesÚn_tempÚ
c_freq_binÚlatent_outputs"                                     r(   r‹   zClapAudioEncoder.forward  sc  € ð  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ˆà"×(Ñ(¨Ñ+ˆ
à×(Ñ(¨Ð8JÓKˆá"6™B¸DÐÙ+?¡RÀTÐ"Ù$5™b¸4Ðà×1Ñ1°!Ñ4ÐáØ)6×)<Ñ)<Ñ&ˆJ˜˜;à$6 M×$6Ñ$6°zÐ$bÐDTÐ$bÐVaÒ$bÐ!Ø$9×$AÑ$AÀ!ÀQÈÈ1Ó$MÐ!Ø -Ð!1Ñ1ÐØ&Ð+@Ð*BÑBÐ&ä(¨¯©Ó5ò 	9‰OˆAˆ|Ø#×5Ñ5°aÑ8Ðá(¨Ð8HÐJ[Ð]mÓnˆMà)¨!Ñ,ˆMà0=¸aÑ0@Ð-Ø -¨aÑ 0Ðà 1°"Ñ 5Ð7HÈÑ7LÐMÐá#Ñ(PØ-N×-TÑ-TÑ*�
˜A˜{ð )OÐ(I×(NÑ(NØð)Ø"3°AÑ"6Ð8IÈ!Ñ8LÐ!Mð)ØOZò)Ð%ð )>×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø!Ð&GÐ%IÑIÐ!Ø*Ð/DÐ.FÑFÑ*Ù%Ñ.VØ-:×-@Ñ-@Ñ*�
˜A˜{à(:¨×(:Ñ(:¸:Ð(fÐHXÐ(fÐZeÒ(fÐ%Ø(=×(EÑ(EÀaÈÈAÈqÓ(QÐ%Ø! mÐ%5Ñ5Ð!Ø*Ð/DÐ.FÑFÐ*â Ø# }°Q°RÐ'8Ñ8Ñ#ð?	9ð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*   )NFFFFT)rN   rO   rP   ru   rŸ  r   rA   rR   rõ   rT   rW   r‹   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                   ó0   ‡ — e Zd Zdeez  fˆ fd„Zd„ Zˆ xZS )ÚClapProjectionLayerrm   c                 óü   •— t         ‰| �  «        || _        |j                  }|j                  }t        j                  ||«      | _        t        |j                     | _
        t        j                  ||«      | _        y rb   )rt   ru   rm   r®  Úprojection_dimr   rÈ   Úlinear1r	   Úprojection_hidden_actÚ
activationÚlinear2)rj   rm   r®  rº  r…   s       €r(   ru   zClapProjectionLayer.__init__Š  sa   ø€ Ü‰ÑÔØˆŒØ×(Ñ(ˆØ×.Ñ.ˆä—y‘y ¨nÓ=ˆŒÜ  ×!=Ñ!=Ñ>ˆŒÜ—y‘y °Ó@ˆ�r*   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rb   )r»  r½  r¾  r  s     r(   r‹   zClapProjectionLayer.forward”  s2   € ØŸ™ ]Ó3ˆØŸ™¨Ó6ˆØŸ™ ]Ó3ˆØÐr*   )rN   rO   rP   r   r   ru   r‹   r�   rŽ   s   @r(   r¸  r¸  ‰  s   ø„ ðA˜°Ñ?õ Aör*   r¸  c                   óì   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  ded	ej                  fd
„Z
ed„ «       Zedd„«       Zˆ xZS )ÚClapTextEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 óT  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j
                  |j                  ¬«      | _
        t        j                  |j                  «      | _        | j                  dt!        j"                  |j$                  «      j'                  d«      d¬«       | j                  dt!        j(                  | j*                  j-                  «       t         j.                  ¬«      d¬«       |j                  | _        t        j                  |j$                  |j
                  | j0                  ¬«      | _        y )	N)Úpadding_idxr.  Úposition_ids©r   r/   T)Ú
persistentÚtoken_type_ids)r  )rt   ru   r   Ú	EmbeddingÚ
vocab_sizer®  Úpad_token_idÚword_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsr    r3  rÍ   r  rÏ   rÆ   rA   rB   Úmax_position_embeddingsÚexpandrÄ   rÄ  rª   rB  rÃ  Úposition_embeddings©rj   rm   r…   s     €r(   ru   zClapTextEmbeddings.__init__Ÿ  s4  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒà×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐeið 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbfð 	ô 	
ð "×.Ñ.ˆÔÜ#%§<¡<Ø×*Ñ*¨F×,>Ñ,>ÈD×L\ÑL\ô$
ˆÕ r*   NÚ	input_idsrÇ  rÄ  Úinputs_embedsÚpast_key_values_lengthr=   c                 ó  — |€<|�| j                  || j                  |«      }n| j                  || j                  «      }|�|j                  «       }n|j                  «       d d }|\  }}|€³t	        | d«      rm| j
                  j                  |j                  «      j                  |j                  d   d«      }	t        j                  |	d|¬«      }	|	j                  ||«      }n:t        j                  |t        j                  | j                  j                  ¬«      }|€| j                  |«      }| j!                  |«      }
||
z   }| j#                  |«      }||z   }| j%                  |«      }| j'                  |«      }|S )Nr/   rÇ  r   r   )rÑ   Úindexr  )Ú"create_position_ids_from_input_idsrÃ  Ú&create_position_ids_from_inputs_embedsrª   ÚhasattrrÇ  rC  r@   rÏ  r   rA   ÚgatherrÄ   rB  rÄ  rË  rÍ  rÐ  r    rÏ   )rj   rÒ  rÇ  rÄ  rÓ  rÔ  Úinput_shaper$   Ú
seq_lengthÚbuffered_token_type_idsrÍ  Ú
embeddingsrÐ  s                r(   r‹   zClapTextEmbeddings.forward³  s€  € ð ÐØÐ$à#×FÑFØ˜t×/Ñ/Ð1Gó ‘ð  $×JÑJÈ=ÐZ^×ZjÑZjÓk�àÐ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà!,Ñˆ
�Jð
 Ð!Ü�tÐ-Ô.à*.×*=Ñ*=×*@Ñ*@À×ATÑATÓ*U×*\Ñ*\Ð]i×]oÑ]oÐpqÑ]rÐtvÓ*wÐ'Ü*/¯,©,Ð7NÐTUÐ]iÔ*jÐ'Ø!8×!?Ñ!?À
ÈJÓ!W‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ð%:Ñ:ˆ
à"×6Ñ6°|ÓDÐØÐ"5Ñ5ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr*   c                 óæ   — | j                  «       dd }|d   }t        j                  |dz   ||z   dz   t        j                  | j                  ¬«      }|j                  d«      j                  |«      S )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   r  r   )rª   rA   rB   rB  r@   rÛ   rÏ  )rÓ  rÃ  rÛ  Úsequence_lengthrÄ  s        r(   rØ  z9ClapTextEmbeddings.create_position_ids_from_inputs_embedsã  sp   € ð $×(Ñ(Ó*¨3¨BÐ/ˆØ% a™.ˆä—|‘|Ø˜!‰O˜_¨{Ñ:¸QÑ>ÄeÇjÁjÐYf×YmÑYmô
ˆð ×%Ñ% aÓ(×/Ñ/°Ó<Ð<r*   c                 ó¾   — | j                  |«      j                  «       }t        j                  |d¬«      j	                  |«      |z   |z  }|j                  «       |z   S )a  
        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×   )Únerx   rA   ÚcumsumÚtype_asrB  )rÒ  rÃ  rÔ  ÚmaskÚincremental_indicess        r(   r×  z5ClapTextEmbeddings.create_position_ids_from_input_idsõ  sW   € ð �|‰|˜KÓ(×,Ñ,Ó.ˆÜ$Ÿ|™|¨D°aÔ8×@Ñ@ÀÓFÐI_Ñ_ÐcgÑgÐØ"×'Ñ'Ó)¨KÑ7Ð7r*   )NNNNr   )r   )rN   rO   rP   rQ   ru   rA   Ú
LongTensorrR   rx   rô   r‹   ÚstaticmethodrØ  r×  r�   rŽ   s   @r(   rÁ  rÁ  œ  s´   ø„ ÙQô
ð, .2Ø26Ø04Ø26Ø&'ñ.à×#Ñ# dÑ*ð.ð ×(Ñ(¨4Ñ/ð.ð ×&Ñ&¨Ñ-ð	.ð
 ×(Ñ(¨4Ñ/ð.ð !$ð.ð 
�‰ó.ð` ñ=ó ð=ð" ò8ó ô8r*   rÁ  ÚmodulerÊ   rË   rÌ   rÓ   ÚscalingrÏ   c                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr,   r   r/   )rÑ   r  )Úpr   r   )rA   rØ   r¬   r   rD   rÜ   Úfloat32rC  r  rÏ   r   r3   )
ré  rÊ   rË   rÌ   rÓ   rê  rÏ   ÚkwargsÚattn_weightsÚattn_outputs
             r(   Úeager_attention_forwardrñ    sº   € ô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KØ˜Ð$Ð$r*   c                   ó¦   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   de	ej
                  ej
                  dz  f   fd„Z
ˆ xZS )	ÚClapTextSelfAttentionc                 ó$  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|| _        |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                   «      | _        |j                   | _        | j                  dz  | _        y )Nr   Úembedding_sizer·   r¸   r¹   ç      à¿)rt   ru   r®  r½   rÙ  r©   rm   rx   r¾   r¿   r   rÈ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   Úattention_dropoutrê  rÑ  s     €r(   ru   zClapTextSelfAttention.__init__  sC  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔ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                 óx  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  sdn| j                  | j                  dœ|¤Ž\  }
} |
j                  g |¢d‘­Ž j!                  «       }
|
|fS )Nr/   r   r,   r  )rÏ   rê  )r   r¾   rÊ   r1   r¬   rË   rÌ   r   Úget_interfacerm   Ú_attn_implementationrñ  r   r÷  rê  r!   r3   )rj   r"   rÓ   rî  rÛ  rÝ   Úquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerð  rï  s               r(   r‹   zClapTextSelfAttention.forward4  s>  € ð $×)Ñ)¨#¨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ñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(r*   rb   )rN   rO   rP   ru   rA   rô   rR   r   r   rT   r‹   r�   rŽ   s   @r(   ró  ró    sd   ø„ ô6ð0 48ñ)à—|‘|ð)ð ×)Ñ)¨DÑ0ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)r*   ró  c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚClapTextSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr.  )rt   ru   r   rÈ   r®  rù   r    r3  rÍ   r  rÏ   rÑ  s     €r(   ru   zClapTextSelfOutput.__init__V  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r*   r"   rû   r=   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rb   ©rù   rÏ   r    rþ   s      r(   r‹   zClapTextSelfOutput.forward\  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr*   rÿ   rŽ   s   @r(   r   r   U  ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r*   r   c            	       ó‚   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   dej
                  fd„Z	ˆ xZ
S )	ÚClapTextAttentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y rb   )rt   ru   ró  rj   r   rŠ   rÑ  s     €r(   ru   zClapTextAttention.__init__e  s&   ø€ Ü‰ÑÔÜ)¨&Ó1ˆŒ	Ü(¨Ó0ˆ�r*   Nr"   rÓ   rî  r=   c                 ó^   — |} | j                   |fd|i|¤Ž\  }}| j                  ||«      }|S ©NrÓ   r  )rj   r"   rÓ   rî  r‡   r±   s         r(   r‹   zClapTextAttention.forwardj  sK   € ð !ˆØ$˜4Ÿ9™9Øñ
à)ð
ð ñ
Ñˆ�qð
 Ÿ™ M°8Ó<ˆØÐr*   rb   )rN   rO   rP   ru   rA   rô   rR   r   r   r‹   r�   rŽ   s   @r(   r  r  d  sQ   ø„ ô1ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰÷r*   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚClapTextIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rb   )rt   ru   r   rÈ   r®  Úintermediate_sizerù   rc   r  r  r	   r  rÑ  s     €r(   ru   zClapTextIntermediate.__init__|  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r*   r"   r=   c                 óJ   — | j                  |«      }| j                  |«      }|S rb   r  r  s     r(   r‹   zClapTextIntermediate.forward„  r  r*   rÿ   rŽ   s   @r(   r  r  {  r  r*   r  c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚClapTextOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y r  )rt   ru   r   rÈ   r  r®  rù   r    r3  rÍ   r  rÏ   rÑ  s     €r(   ru   z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                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rb   r  rþ   s      r(   r‹   zClapTextOutput.forward’  r  r*   rÿ   rŽ   s   @r(   r  r  ‹  r  r*   r  c            	       óˆ   ‡ — e Zd Zˆ fd„Z	 d	dej
                  dej                  dz  dee   dej
                  fd„Z	d„ Z
ˆ xZS )
ÚClapTextLayerc                 ó²   •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |«      | _	        y )Nr   )
rt   ru   r0  Úseq_len_dimr  r5  r  r8  r  rŠ   rÑ  s     €r(   ru   zClapTextLayer.__init__›  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6Ó2ˆŒÜ0°Ó8ˆÔÜ$ VÓ,ˆ�r*   Nr"   rÓ   rî  r=   c                 óˆ   —  | j                   |fd|i|¤Ž}t        | j                  | j                  | j                  |«      }|S r  )r5  r   Úfeed_forward_chunkr0  r  )rj   r"   rÓ   rî  s       r(   r‹   zClapTextLayer.forward£  sY   € ð '˜Ÿ™Øñ
à)ð
ð ñ
ˆô 2Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUbó
ˆð Ðr*   c                 óL   — | j                  |«      }| j                  ||«      }|S rb   )r8  rŠ   )rj   r  Úintermediate_outputra  s       r(   r  z ClapTextLayer.feed_forward_chunkµ  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr*   rb   )rN   rO   rP   ru   rA   rô   rR   r   r   r‹   r  r�   rŽ   s   @r(   r  r  š  sV   ø„ ô-ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰óö$r*   r  c            	       ón   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   de	fd„Z
ˆ xZS )	ÚClapTextEncoderc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w ró   )
rt   ru   rm   r   rg  rh  Únum_hidden_layersr  ÚlayerrŽ  )rj   rm   rm  r…   s      €r(   ru   zClapTextEncoder.__init__½  sN   ø€ Ü‰ÑÔØˆŒÜ—]‘]Ä5È×IaÑIaÓCbÖ#c¸a¤M°&Õ$9Ò#cÓdˆŒ
Ø&+ˆÕ#ùò $ds   ½A#Nr"   rÓ   rî  r=   c                 óP   — | j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )N)rL   )r!  r   )rj   r"   rÓ   rî  rp  s        r(   r‹   zClapTextEncoder.forwardÃ  sC   € ð !ŸJ™Jò 	ˆLÙ(ØØñð ñ‰Mð	ô Ø+ô
ð 	
r*   rb   )rN   rO   rP   ru   rA   rô   rR   r   r   r   r‹   r�   rŽ   s   @r(   r  r  ¼  sM   ø„ ô,ð 48ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð Ð+Ñ,ð	
ð
 
÷
r*   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚClapTextPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y rb   )rt   ru   r   rÈ   r®  rù   ÚTanhr½  rÑ  s     €r(   ru   zClapTextPooler.__init__×  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r*   r"   r=   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S r;  )rù   r½  )rj   r"   Úfirst_token_tensorÚpooled_outputs       r(   r‹   zClapTextPooler.forwardÜ  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr*   rÿ   rŽ   s   @r(   r$  r$  Ö  s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ r*   r$  c                   óx   ‡ — e Zd ZU eed<   dZdZdZ ej                  «       de
j                  fˆ fd„«       Zˆ xZS )ÚClapPreTrainedModelrm   Úclap)ÚaudioÚtextFré  c                 óú  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      r×t        j                  |j                  j                  d|dz  ¬«       t        j                  |j                  j                  d|dz  ¬«       t        j                  |j                  t        j                  |j                  j                  d   «      j!                  d«      «       t        j"                  |j$                  «       y	t	        |t&        «      r�t        j(                  |j*                  t-        j.                  | j                  j0                  «      «       t        j(                  |j2                  t-        j.                  | j                  j0                  «      «       y	t	        |t4        j6                  «      r&t        j                  |j                  d|dz  ¬«       y	t	        |t4        j8                  t4        j:                  f«      r‡| j                  j<                  dz  d| j                  j>                  z  dz  z  |z  }t        j                  |j                  |¬«       |j@                  � t        j"                  |j@                  «       y	y	t	        |tB        «      rNt        j"                  |jD                  «       t        j                  |jF                  |jI                  «       «       y	y	)
zInitialize the weightsr  g{®Gáz”?)ÚmeanÚstdr/   rÅ  rö  r,   )r1  N)%rt   Ú_init_weightsrm   Úinitializer_factorrc   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È  rz   rÈ   r®  r   r¼   rµ   rÅ   rº   rÇ   )rj   ré  ÚfactorÚin_proj_stdr…   s       €r(   r2  z!ClapPreTrainedModel._init_weightsì  sô  ø€ ô 	‰Ñ˜fÔ%Ø—‘×/Ñ/ˆä�fÔ0Ô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ØŸ;™;×2Ñ2°DÑ8¸aÀ$Ç+Á+×B_ÑB_Ñ>_ÐdhÑ=hÑiÐlrÑrˆKÜ�L‰L˜Ÿ™¨KÕ8Ø�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ä˜Ô 6Ô7Ü�K‰K˜×;Ñ;Ô<Ü�J‰J�v×5Ñ5°v×7\Ñ7\Ó7^Õ_ð 8r*   )rN   rO   rP   r   rS   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingrA   Úno_gradr   ÚModuler2  r�   rŽ   s   @r(   r+  r+  å  sC   ø… àÓØÐØ(ÐØ&+Ð#à€U‡]�]ƒ_ð` B§I¡Iô `ó ô`r*   r+  c                   óÀ   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Zdej                  fd„Z
e	 	 ddej                  dz  dej                  dz  d	ee   deez  fd
„«       Zˆ xZS )ÚClapAudioModelrm   r§  r-  c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rb   )rt   ru   r�  Úaudio_encoderÚ	post_initrÑ  s     €r(   ru   zClapAudioModel.__init__  s'   ø€ Ü‰Ñ˜Ô Ü-¨fÓ5ˆÔà�‰Õr*   r=   c                 óB   — | j                   j                  j                  S rb   )rI  r†  rž   ri   s    r(   Úget_input_embeddingsz#ClapAudioModel.get_input_embeddings  s   € Ø×!Ñ!×-Ñ-×2Ñ2Ð2r*   Nr   rî  c                 ó,   —  | j                   d||dœ|¤ŽS )ad  
        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   rU   )rI  )rj   r§  r   rî  s       r(   r‹   zClapAudioModel.forward  s.   € ð: "ˆt×!Ñ!ð 
Ø)Øñ
ð ñ
ð 	
r*   ©NN)rN   rO   rP   r   rS   Úmain_input_namerB  ru   r   rE  rL  r   rA   rR   Ú
BoolTensorr   r   rT   r   r‹   r�   rŽ   s   @r(   rG  rG    s”   ø… ØÓØ&€OØÐð˜õ ð3 b§i¡ió 3ð ð 48Ø-1ñ 
à×)Ñ)¨DÑ0ð 
ð ×#Ñ# dÑ*ð 
ð Ð+Ñ,ð	 
ð
 
Ð+Ñ	+ò 
ó ô 
r*   rG  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                   ó  ‡ — e Zd ZU eed<   dZeedœZdˆ fd„	Z	d„ Z
d„ Zeee	 	 	 	 	 ddej                   dz  d	ej                   dz  d
ej                   dz  dej                   dz  dej                   dz  dee   defd„«       «       «       Zˆ xZS )ÚClapTextModelrm   ©r.  ©r"   rM   c                 óº   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |rt        |«      nd| _        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)
rt   ru   rm   rÁ  rÞ  r  Úencoderr$  ÚpoolerrJ  )rj   rm   Úadd_pooling_layerr…   s      €r(   ru   zClapTextModel.__init__N  sM   ø€ ô
 	‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒá0A”n VÔ,ÀtˆŒð 	�‰Õr*   c                 ó.   — | j                   j                  S rb   ©rÞ  rË  ri   s    r(   rL  z"ClapTextModel.get_input_embeddings^  s   € Ø�‰×.Ñ.Ð.r*   c                 ó&   — || j                   _        y rb   r[  ©rj   rÌ   s     r(   Úset_input_embeddingsz"ClapTextModel.set_input_embeddingsa  s   € Ø*/ˆ�‰Õ'r*   NrÒ  rÓ   rÇ  rÄ  rÓ  rî  r=   c                 ó  — |�|�t        d«      ‚|�#| j                  ||«       |j                  «       }n!|�|j                  «       d d }nt        d«      ‚|\  }}	|�|j                  n|j                  }
|€t	        j
                  ||	f|
¬«      }| j                  ||||¬«      }t        | j                  ||¬«      } | j                  |fd|i|¤Ž}|d   }| j                  �| j                  |«      nd }t        ||¬	«      S )
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Ó  )rm   rÓ  rÓ   rÓ   r   )rL   r¥  )r©   Ú%warn_if_padding_and_no_attention_maskrª   r@   rA   ÚonesrÞ  r
   rm   rW  rX  r   )rj   rÒ  rÓ   rÇ  rÄ  rÓ  rî  rÛ  r$   rÜ  r@   Úembedding_outputÚencoder_outputsÚsequence_outputr)  s                  r(   r‹   zClapTextModel.forwardd  s:  € ð Ð  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà!,Ñˆ
�JØ%.Ð%:�×!Ò!À×@TÑ@TˆàÐ!Ü"ŸZ™Z¨*°jÐ)AÈ6ÔRˆNàŸ?™?ØØ%Ø)Ø'ð	 +ó 
Ðô 3Ø—;‘;Ø*Ø)ô
ˆð '˜$Ÿ,™,Øñ
à)ð
ð ñ
ˆð
 *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä)Ø-Ø'ô
ð 	
r*   )T)NNNNN)rN   rO   rP   r   rS   rB  r  ró  Ú_can_record_outputsru   rL  r^  r   r   r   rA   rô   r   r   r   r‹   r�   rŽ   s   @r(   rS  rS  8  sÚ   ø… ð ÓØ Ðà&Ø+ñÐõ
ò /ò0ð  ØØð *.Ø.2Ø.2Ø,0Ø-1ñ1
à—<‘< $Ñ&ð1
ð Ÿ™ tÑ+ð1
ð Ÿ™ tÑ+ð	1
ð
 —l‘l TÑ)ð1
ð —|‘| dÑ*ð1
ð Ð+Ñ,ð1
ð 
$ò1
ó ó ó  ô1
r*   rS  c                   ó"  ‡ — e Zd ZU eed<   defˆ fd„Zee	 	 ddej                  dej                  dz  dej                  dz  de
e   deez  f
d	„«       «       Zee	 	 dd
ej                  dej                  dz  dej                  dz  de
e   deez  f
d„«       «       Zee	 	 	 	 	 	 ddej                   dz  d
ej"                  dz  dej$                  dz  dej                  dz  dej                   dz  dedz  de
e   deez  fd„«       «       Zˆ xZS )r9  rm   c                 ó.  •— t         ‰| �  |«       t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚|j                  }|j                  }t        j                  t        j                  t        j                  |j                  «      «      «      | _        t        j                  t        j                  t        j                  |j                  «      «      «      | _        |j$                  | _        t'        |«      | _        t+        |«      | _        t/        |«      | _        t+        |«      | _        | j5                  «        y )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 )rt   ru   rc   Útext_configr   Ú	TypeErrorÚtypeÚaudio_configr   r   rÃ   rA   r?  rÙ   r<  r=  r;  r>  rº  rS  Ú
text_modelr¸  Útext_projectionrG  Úaudio_modelÚaudio_projectionrJ  )rj   rm   ri  rl  r…   s       €r(   ru   zClapModel.__init__Ÿ  s=  ø€ Ü‰Ñ˜Ô ä˜&×,Ñ,¬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                 ó    —  | j                   d|||dœ|¤Ž}| j                  |j                  «      }t        j                  |d¬«      |_        |S )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×   rU   )rm  rn  r¥  ÚFÚ	normalize)rj   rÒ  rÓ   rÄ  rî  Útext_outputsÚtext_featuress          r(   Úget_text_featureszClapModel.get_text_features¿  s^   € ð. 4C°4·?±?ð 4
ØØ)Ø%ñ4
ð ñ	4
ˆð ×,Ñ,¨\×-GÑ-GÓHˆÜ%&§[¡[°ÀBÔ%GˆÔ"àÐr*   r§  r   c                 óž   —  | j                   d||dœ|¤Ž}| j                  |j                  «      }t        j                  |d¬«      |_        |S )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)
        ```rN  r/   r×   rU   )ro  rp  r¥  rs  rt  )rj   r§  r   rÓ   rî  Úaudio_outputsÚaudio_featuress          r(   Úget_audio_featureszClapModel.get_audio_featuresá  sZ   € ð8 5E°D×4DÑ4Dð 5
Ø)°Yñ5
ØBHñ5
ˆð ×.Ñ.¨}×/JÑ/JÓKˆÜ&'§k¡k°.ÀbÔ&IˆÔ#àÐr*   Úreturn_lossc           	      ó°  —  | j                   d
||dœ|¤Ž} | j                  d
|||dœ|¤Ž}	|j                  }
| j                  |
«      }
|	j                  }| j	                  |«      }|
|
j                  ddd¬«      z  }
||j                  ddd¬«      z  }| j                  j                  «       }| j                  j                  «       }t        j                  ||
j                  «       «      |z  }t        j                  |
|j                  «       «      |z  }d}|r,t        |«      }t        |j                  «       «      }||z   dz  }t        |||||
|	|¬	«      S )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
        ```rN  rr  r,   r/   T)rì  rÑ   ÚkeepdimNg       @)r[   r\   r]   rK   rX   r^   r_   rU   )ro  rm  r¥  rp  rn  r¢   r>  Úexpr;  rA   rØ   ÚtrG   rZ   )rj   rÒ  r§  r   rÓ   rÄ  r|  rî  ry  ru  rX   rK   Úlogit_scale_textÚlogit_scale_audior]   r\   r[   Úcaption_lossÚ
audio_losss                      r(   r‹   zClapModel.forward  s…  € ðN )˜×(Ñ(ð 
Ø)Øñ
ð ñ
ˆð '�t—‘ð 
ØØ)Ø%ñ
ð ñ	
ˆð %×2Ñ2ˆØ×,Ñ,¨\Ó:ˆà"×0Ñ0ˆØ×*Ñ*¨;Ó7ˆð $ l×&7Ñ&7¸!ÀÈTÐ&7Ó&RÑRˆØ! K×$4Ñ$4°q¸bÈ$Ð$4Ó$OÑOˆð  ×-Ñ-×1Ñ1Ó3ÐØ ×.Ñ.×2Ñ2Ó4ÐÜŸ,™, {°L·N±NÓ4DÓEÐHXÑXˆÜ Ÿ<™<¨°k·m±m³oÓFÐIZÑZÐàˆÙÜ+¨OÓ<ˆLÜ)Ð*:×*<Ñ*<Ó*>Ó?ˆJØ  :Ñ-°Ñ4ˆDäØØ-Ø+Ø#Ø%Ø*Ø,ô
ð 	
r*   rO  )NNNNNN)rN   rO   rP   r   rS   ru   r   r   rA   rô   r   r   rT   r   rw  r{  rç  rR   rQ  rõ   rZ   r‹   r�   rŽ   s   @r(   r9  r9  ›  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*   r9  c                   óö   ‡ — e Zd ZU eed<   dZeedœZdefˆ fd„Z	de
j                  fd„Zd„ Zee	 	 	 dd	ej"                  dz  d
ej"                  dz  dej"                  dz  dee   deez  f
d„«       «       Zˆ xZS )ÚClapTextModelWithProjectionrm   rT  rU  c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rb   )rt   ru   rS  rm  r¸  rn  rJ  rÑ  s     €r(   ru   z$ClapTextModelWithProjection.__init__c  s3   ø€ Ü‰Ñ˜Ô Ü'¨Ó/ˆŒÜ2°6Ó:ˆÔà�‰Õr*   r=   c                 óB   — | j                   j                  j                  S rb   ©rm  rÞ  rË  ri   s    r(   rL  z0ClapTextModelWithProjection.get_input_embeddingsj  s   € Ø�‰×)Ñ)×9Ñ9Ð9r*   c                 ó:   — || j                   j                  _        y rb   r‰  r]  s     r(   r^  z0ClapTextModelWithProjection.set_input_embeddingsm  s   € Ø5:ˆ�‰×"Ñ"Õ2r*   NrÒ  rÓ   rÄ  rî  c                 óÂ   —  | j                   d|||dœ|¤Ž}|j                  }| j                  |«      }t        ||j                  |j
                  |j                  ¬«      S )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
        ```rr  )rK   rL   r"   rM   rU   )rm  r¥  rn  rJ   rL   r"   rM   )rj   rÒ  rÓ   rÄ  rî  ru  r)  rK   s           r(   r‹   z#ClapTextModelWithProjection.forwardp  su   € ð. 4C°4·?±?ð 4
ØØ)Ø%ñ4
ð ñ	4
ˆð %×2Ñ2ˆØ×*Ñ*¨=Ó9ˆä"Ø#Ø*×<Ñ<Ø&×4Ñ4Ø#×.Ñ.ô	
ð 	
r*   )NNN)rN   rO   rP   r   rS   rB  r  ró  re  ru   r   rE  rL  r^  r   r   rA   rô   r   r   rT   rJ   r‹   r�   rŽ   s   @r(   r†  r†  Z  s¼   ø… àÓØ Ðà&Ø+ñÐð
˜~õ ð: b§i¡ió :ò;ð Øð *.Ø.2Ø,0ñ	#
à—<‘< $Ñ&ð#
ð Ÿ™ tÑ+ð#
ð —l‘l TÑ)ð	#
ð
 Ð+Ñ,ð#
ð 
Ð$Ñ	$ò#
ó ó ô#
r*   r†  c                   óÊ   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Zdej                  fd„Z
ee	 	 ddej                  dz  dej                  dz  d	ee   deez  fd
„«       «       Zˆ xZS )ÚClapAudioModelWithProjectionrm   r§  r-  c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rb   )rt   ru   rG  ro  r¸  rp  rJ  rÑ  s     €r(   ru   z%ClapAudioModelWithProjection.__init__ž  s4   ø€ Ü‰Ñ˜Ô Ü)¨&Ó1ˆÔÜ 3°FÓ ;ˆÔà�‰Õr*   r=   c                 óV   — | j                   j                  j                  j                  S rb   )ro  rI  r†  rž   ri   s    r(   rL  z1ClapAudioModelWithProjection.get_input_embeddings¥  s    € Ø×Ñ×-Ñ-×9Ñ9×>Ñ>Ð>r*   Nr   rî  c                 ó¼   —  | j                   d||dœ|¤Ž}| j                  |j                  «      }t        ||j                  |j
                  |j                  ¬«      S )au  
        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
        ```rN  )rX   rL   rM   r"   rU   )ro  rp  r¥  rW   rL   rM   r"   )rj   r§  r   rî  ry  rX   s         r(   r‹   z$ClapAudioModelWithProjection.forward¨  so   € ð: 5E°D×4DÑ4Dð 5
Ø)Øñ5
ð ñ5
ˆð ×,Ñ,¨]×-HÑ-HÓIˆä#Ø%Ø+×=Ñ=Ø$×/Ñ/Ø'×5Ñ5ô	
ð 	
r*   rO  )rN   rO   rP   r   rS   rP  rB  ru   r   rE  rL  r   r   rA   rR   rQ  r   r   rT   rW   r‹   r�   rŽ   s   @r(   r�  r�  ˜  sœ   ø… àÓØ&€OØÐð˜õ ð? b§i¡ió ?ð Øð 48Ø-1ñ(
à×)Ñ)¨DÑ0ð(
ð ×#Ñ# dÑ*ð(
ð Ð+Ñ,ð	(
ð
 
Ð%Ñ	%ò(
ó ó ô(
r*   r�  )r9  r+  rS  r†  rG  r�  r)  )[rQ   rÀ   rÙ   Úcollections.abcr   Údataclassesr   Útypingr   rA   Útorch.nn.functionalr   rD   rs  Ú r   r4  Ú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_loggerrN   Úloggerr)   r9   r;   rô   rG   rJ   rW   rZ   rE  rl   r�   rµ   r÷   r  r  r  r  r,  re  rw  r�  r¸  rÁ  r*  rñ  ró  r   r  r  r  r  r  r$  r+  rG  rS  r9  r†  r�  Ú__all__rU   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˜"Ÿ)™)ô ô&g8˜Ÿ™ô g8ðd ñ%Ø�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*   