Ë
    S^(h}š ã                   ó>  — d Z ddlZddlZddlmZ ddlmZmZmZm	Z	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mZmZ dd	lmZ dd
lmZmZmZmZ ddlmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'  e!jP                  e)«      Z*dZ+d„ Z,d„ Z-d„ Z.d\d„Z/dej`                  dej`                  fd„Z1e G d„ de«      «       Z2e G d„ de«      «       Z3e G d„ de«      «       Z4 G d„ dejj                  «      Z6 G d„ dejj                  «      Z7 G d „ d!ejj                  «      Z8 G d"„ d#ejj                  «      Z9 G d$„ d%ejj                  «      Z: G d&„ d'ejj                  «      Z; G d(„ d)ejj                  «      Z< G d*„ d+ejj                  «      Z= G d,„ d-ejj                  «      Z> G d.„ d/ejj                  «      Z? G d0„ d1ejj                  «      Z@ G d2„ d3ejj                  «      ZAd4ZBd5ZCd6ZDd7ZE G d8„ d9ejj                  «      ZF G d:„ d;ejj                  «      ZG G d<„ d=ejj                  «      ZH G d>„ d?ejj                  «      ZId@eHiZJ G dA„ dBejj                  «      ZK G dC„ dDejj                  «      ZL G dE„ dFejj                  «      ZM G dG„ dHejj                  «      ZN G dI„ dJejj                  «      ZO G dK„ dLejj                  «      ZP G dM„ dNe«      ZQ G dO„ dPeQ«      ZR G dQ„ dReQ«      ZS eeB«       G dS„ dTeQ«      «       ZT edUeB«       G dV„ dWeQ«      «       ZU edXeB«       G dY„ dZeQ«      «       ZVg d[¢ZWy)]zPyTorch CLAP model.é    N)Ú	dataclass)ÚAnyÚListÚOptionalÚTupleÚUnion)Únné   )ÚACT2FN)Ú)BaseModelOutputWithPastAndCrossAttentionsÚBaseModelOutputWithPoolingÚ,BaseModelOutputWithPoolingAndCrossAttentions)ÚPreTrainedModel)Úapply_chunking_to_forwardÚ find_pruneable_heads_and_indicesÚmeshgridÚprune_linear_layer)ÚModelOutputÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsÚ	torch_inté   )ÚClapAudioConfigÚ
ClapConfigÚClapTextConfigzlaion/clap-htsat-fusedc                 ó”   — | 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         úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/clap/modeling_clap.pyÚinterpolater)   3   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   D   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;   Y   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*   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   ©Údim)ÚneÚintÚtorchÚcumsumÚtype_asÚlong)Ú	input_idsÚpadding_idxÚpast_key_values_lengthÚmaskÚincremental_indicess        r(   Ú"create_position_ids_from_input_idsrJ   m   sW   € ð �<‰<˜Ó$×(Ñ(Ó*€DÜ Ÿ<™<¨°!Ô4×<Ñ<¸TÓBÐE[Ñ[Ð_cÑcÐØ×#Ñ#Ó%¨Ñ3Ð3r*   ÚlogitsÚreturnc                 ó–   — t        j                  t        | «      | j                  ¬«      }t        j
                  j                  | |«      S )N©Údevice)rA   ÚarangeÚlenrO   r	   Ú
functionalÚcross_entropy)rK   Úlabelss     r(   Úcontrastive_lossrU      s1   € Ü�\‰\œ#˜f›+¨f¯m©mÔ<€FÜ�=‰=×&Ñ& v¨vÓ6Ð6r*   c                   óÆ   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eeej                  df      ed<   dZeeej                  df      ed<   y)ÚClapTextModelOutputaÃ  
    Base class for text model's outputs that also contains a pooling of the last hidden states.

    Args:
        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.
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    NÚtext_embedsÚlast_hidden_state.r"   Ú
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rX   r   rA   ÚFloatTensorÚ__annotations__rY   r"   r   rZ   © r*   r(   rW   rW   „   sr   … ñð* 04€K�˜%×+Ñ+Ñ,Ó3Ø59Ð�x × 1Ñ 1Ñ2Ó9Ø=A€M�8˜E %×"3Ñ"3°SÐ"8Ñ9Ñ:ÓAØ:>€J�˜˜u×0Ñ0°#Ð5Ñ6Ñ7Ô>r*   rW   c                   óÆ   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eeej                  df      ed<   dZeeej                  df      ed<   y)ÚClapAudioModelOutputak  
    ClapAudio model output to mimic the output of the original implementation.

    Args:
        audio_embeds (`torch.FloatTensor` of shape `(batch_size, hidden_size)`):
            The Audio embeddings obtained by applying the projection layer to the pooler_output.
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
    NÚaudio_embedsrY   .r"   rZ   )r[   r\   r]   r^   rd   r   rA   r_   r`   rY   r"   r   rZ   ra   r*   r(   rc   rc   ¢   sr   … ñð* 15€L�(˜5×,Ñ,Ñ-Ó4Ø59Ð�x × 1Ñ 1Ñ2Ó9Ø=A€M�8˜E %×"3Ñ"3°SÐ"8Ñ9Ñ:ÓAØ:>€J�˜˜u×0Ñ0°#Ð5Ñ6Ñ7Ô>r*   rc   c                   ó  — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eej                     ed<   dZeej                     ed<   dZeej                     ed<   dZeed<   dZeed	<   d
ee   fd„Zy)Ú
ClapOutputað  
    Args:
        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_textrX   rd   Útext_model_outputÚaudio_model_outputrL   c                 óH   ‡ — t        ˆ fd„‰ j                  «       D «       «      S )Nc              3   ód   •K  — | ]'  }|d vr‰|   nt        ‰|«      j                  «       –— Œ) y­w))rj   rk   N)ÚgetattrÚto_tuple)Ú.0ÚkÚselfs     €r(   ú	<genexpr>z&ClapOutput.to_tuple.<locals>.<genexpr>ß   s=   øè ø€ ò 
àð Ð KÑKˆD�ŠGÔQXÐY]Ð_`ÓQa×QjÑQjÓQlÓlñ
ùs   ƒ-0)ÚtupleÚkeys©rr   s   `r(   ro   zClapOutput.to_tupleÞ   s#   ø€ Üó 
à—Y‘Y“[ô
ó 
ð 	
r*   )r[   r\   r]   r^   rg   r   rA   r_   r`   rh   ri   rX   rd   rj   r   rk   r   r   ro   ra   r*   r(   rf   rf   ¿   s›   … ñð( )-€Dˆ(�5×$Ñ$Ñ
%Ó,Ø48Ð�h˜u×0Ñ0Ñ1Ó8Ø37€O�X˜e×/Ñ/Ñ0Ó7Ø/3€K�˜%×+Ñ+Ñ,Ó3Ø04€L�(˜5×,Ñ,Ñ-Ó4Ø48ÐÐ1Ó8Ø59ÐÐ2Ó9ð
˜% ™*ô 
r*   rf   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚClapDropPathz²
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). This is a slightly
    refactored version of the `SwinDropPath` implementation.
    c                 ó0   •— t         ‰| �  «        || _        y ©N)ÚsuperÚ__init__Ú	drop_prob)rr   r}   Ú	__class__s     €r(   r|   zClapDropPath.__init__ì   s   ø€ Ü‰ÑÔØ"ˆ�r*   c                 óJ  — | j                   dk(  s| j                  s|S d| j                   z
  }|j                  d   fd|j                  dz
  z  z   }|t	        j
                  ||j                  |j                  ¬«      z   }|j                  «        |j                  |«      |z  }|S )Nç        r   r   )r   ©ÚdtyperO   )
r}   Útrainingr   ÚndimrA   Úrandr‚   rO   Úfloor_Údiv)rr   r"   Ú	keep_probr   Úrandom_tensorÚoutputs         r(   ÚforwardzClapDropPath.forwardð   sš   € Ø�>‰>˜SÒ ¨¯ªØ Ð à˜Ÿ™Ñ&ˆ	à×$Ñ$ QÑ'Ð)¨D°M×4FÑ4FÈÑ4JÑ,KÑKˆà!¤E§J¡J¨u¸M×<OÑ<OÐXe×XlÑXlÔ$mÑmˆØ×ÑÔØ×"Ñ" 9Ó-°Ñ=ˆØˆr*   rz   )r[   r\   r]   r^   r|   r‹   Ú__classcell__©r~   s   @r(   rx   rx   æ   s   ø„ ñõ
#ör*   rx   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)r{   r|   Úpatch_embeds_hidden_sizeÚaff_block_rr@   r	   Ú
SequentialÚConv2dÚBatchNorm2dÚReLUÚ	local_attÚAdaptiveAvgPool2dÚ
global_attÚSigmoidÚsigmoid)rr   r�   ÚchannelsÚdownsize_ratioÚinter_channelsr~   s        €r(   r|   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¡   )rr   r"   ÚresidualÚattention_inputÚfused_layer_outputrŠ   s         r(   r‹   zClapAudioAFFBlock.forward  sb   € Ø'¨(Ñ2ˆà!Ÿ^™^¨OÓ<¸t¿¹ÈÓ?_Ñ_ÐØ!Ÿ\™\Ð*<Ó=Ðà�]Ñ"Ð%7Ñ7¸!¸h¹,È!ÐN`ÑJ`Ñ:aÑaˆØˆr*   ©r[   r\   r]   r^   r   r|   r‹   rŒ   r�   s   @r(   r�   r�   ÿ   s   ø„ ñð
$˜õ $ö0r*   r�   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.
    r�   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-   r’   r
   )r{   r|   Ú
isinstanceÚ	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Únormr�   Úfusion_modelÚ
mel_conv2d)rr   r�   r²   r°   r±   r•   Úscale_factorr~   s          €r(   r|   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ˆà!×/Ò/°f×6HÑ6HÈMÒ6Y‘qÐ`aˆä—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º   ÚsizerQ   r3   r1   rÀ   r2   r¶   rA   r	   rR   Úpadr¿   Ú	transposer¾   )rr   r"   Úis_longer_idxÚglobal_hidden_statesr$   r7   r5   r6   Úoutput_widthÚlocal_hidden_statesÚ_ÚfeaturesÚlocal_widths                r(   r‹   zClapAudioPatchEmbed.forwardW  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*   rz   r©   r�   s   @r(   r«   r«   '  s   ø„ ñð
(˜õ (÷T/r*   r«   c                   ó°   ‡ — e Zd Zˆ fd„Zd„ Z	 	 	 d	dej                  deej                     deej                     dee	   de
ej                     f
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  |«      «      | _        t        j"                  | j                  d   «      }t        j"                  | j                  d   «      }t        j$                  t'        ||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	«      }
| j1                  d
|
«       t        j2                  | j                  | j                  |j4                  ¬«      | _        t        j2                  | j                  | j                  |j4                  ¬«      | _        t        j2                  | j                  | j                  |j4                  ¬«      | _        t        j<                  |j>                  «      | _         y )Nr   úThe hidden size (ú6) is not a multiple of the number of attention heads (ú)r,   r   Úij)Úindexingr/   Úrelative_position_index©Úbias)!r{   r|   rÅ   Únum_attention_headsr@   Úattention_head_sizeÚall_head_sizer®   ÚcollectionsÚabcÚIterabler4   r	   Ú	ParameterrA   ÚzerosÚrelative_position_bias_tablerP   Ústackr   r¶   r2   r3   ÚsumÚregister_bufferÚLinearÚqkv_biasÚqueryÚkeyÚvalueÚDropoutÚattention_probs_dropout_probÚdropout)rr   r�   r>   Ú	num_headsr4   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsrØ   r~   s              €r(   r|   zClapAudioSelfAttention.__init__‹  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ó-
ˆÔ)ô
 —<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—‘œX x°Ð&:ÀTÔJÓKˆÜŸ™ 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ÐØ×ÑÐ6Ð8OÔPä—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*   c                 ó¤   — |j                  «       d d | j                  | j                  fz   }|j                  |«      }|j	                  dddd«      S ©Nr/   r   r,   r   r
   ©rÆ   rÛ   rÜ   r1   r2   ©rr   ÚxÚnew_x_shapes      r(   Útranspose_for_scoresz+ClapAudioSelfAttention.transpose_for_scores°  óL   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØ�F‰F�;ÓˆØ�y‰y˜˜A˜q !Ó$Ð$r*   r"   Úattention_maskÚ	head_maskÚoutput_attentionsrL   c                 ó  — |j                   \  }}}| j                  |«      }| j                  | j                  |«      «      }	| j                  | j	                  |«      «      }
| j                  |«      }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-                  |«      }|�||z  }t        j                  ||
«      }|j                  dddd«      j!                  «       }|j/                  «       d d | j0                  fz   }|j                  |«      }|r||f}|S |f}|S )Nr/   éþÿÿÿr   r   r,   r=   r
   )r   ré   rû   rê   rë   rA   ÚmatmulrÈ   ÚmathÚsqrtrÜ   rã   rØ   r1   r4   r2   r3   Ú	unsqueezerÛ   r	   rR   Úsoftmaxrî   rÆ   rÝ   )rr   r"   rý   rþ   rÿ   r$   r>   r7   Úmixed_query_layerÚ	key_layerÚvalue_layerÚquery_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˜Ø ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆô !Ÿ<™<¨°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ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°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*   ©NNF)r[   r\   r]   r|   rû   rA   ÚTensorr   r_   Úboolr   r‹   rŒ   r�   s   @r(   rÑ   rÑ   Š  sv   ø„ ô#GòJ%ð 7;Ø15Ø,1ñ6à—|‘|ð6ð ! ×!2Ñ!2Ñ3ð6ð ˜E×-Ñ-Ñ.ð	6ð
 $ D™>ð6ð 
ˆu�|‰|Ñ	÷6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 rz   )r{   r|   r	   rç   Údenserì   rí   rî   ©rr   r�   r>   r~   s      €r(   r|   zClapAudioSelfOutput.__init__ð  s6   ø€ Ü‰ÑÔÜ—Y‘Y˜s CÓ(ˆŒ
Ü—z‘z &×"EÑ"EÓFˆ�r*   r"   Úinput_tensorrL   c                 óJ   — | j                  |«      }| j                  |«      }|S rz   ©r  rî   ©rr   r"   r  s      r(   r‹   zClapAudioSelfOutput.forwardõ  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr*   ©r[   r\   r]   r|   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„ Z	 	 	 d	dej                  deej                     deej                     dee	   de
ej                     f
d„Zˆ xZS )
ÚClapAudioAttentionc                 óˆ   •— t         ‰| �  «        t        ||||«      | _        t	        ||«      | _        t        «       | _        y rz   )r{   r|   rÑ   rr   r  rŠ   ÚsetÚpruned_heads)rr   r�   r>   rï   r4   r~   s        €r(   r|   zClapAudioAttention.__init__þ  s8   ø€ Ü‰ÑÔÜ*¨6°3¸	À;ÓOˆŒ	Ü)¨&°#Ó6ˆŒÜ›EˆÕr*   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y ©Nr   r   r=   ©rQ   r   rr   rÛ   rÜ   r#  r   ré   rê   rë   rŠ   r  rÝ   Úunion©rr   ÚheadsÚindexs      r(   Úprune_headszClapAudioAttention.prune_heads  ó  € Üˆu‹:˜Š?ØÜ7Ø�4—9‘9×0Ñ0°$·)±)×2OÑ2OÐQU×QbÑQbó
‰ˆˆuô
 -¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ*¨4¯9©9¯=©=¸%Ó@ˆ�	‰	ŒÜ,¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð )-¯	©	×(EÑ(EÌÈEË
Ñ(Rˆ�	‰	Ô%Ø"&§)¡)×"?Ñ"?À$Ç)Á)×B_ÑB_Ñ"_ˆ�	‰	ÔØ ×-Ñ-×3Ñ3°EÓ:ˆÕr*   r"   rý   rþ   rÿ   rL   c                 ój   — | j                  ||||«      }| j                  |d   |«      }|f|dd  z   }|S ©Nr   r   ©rr   rŠ   )rr   r"   rý   rþ   rÿ   Úself_outputsÚattention_outputr  s           r(   r‹   zClapAudioAttention.forward  sG   € ð —y‘y °À	ÐK\Ó]ˆØŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr*   r  )r[   r\   r]   r|   r+  rA   r  r   r_   r  r   r‹   rŒ   r�   s   @r(   r   r   ý  st   ø„ ô"ò;ð* 7;Ø15Ø,1ñ
à—|‘|ð
ð ! ×!2Ñ!2Ñ3ð
ð ˜E×-Ñ-Ñ.ð	
ð
 $ D™>ð
ð 
ˆ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 rz   )r{   r|   r	   rç   r@   Ú	mlp_ratior  r®   Ú
hidden_actÚstrr   Úintermediate_act_fnr  s      €r(   r|   zClapAudioIntermediate.__init__%  sa   ø€ Ü‰ÑÔÜ—Y‘Y˜s¤C¨×(8Ñ(8¸3Ñ(>Ó$?Ó@ˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r*   r"   rL   c                 óJ   — | j                  |«      }| j                  |«      }|S rz   ©r  r8  ©rr   r"   s     r(   r‹   zClapAudioIntermediate.forward-  ó&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr*   r  r�   s   @r(   r3  r3  $  ó#   ø„ ô9ð U§\¡\ð °e·l±l÷ r*   r3  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 rz   )
r{   r|   r	   rç   r@   r5  r  rì   Úhidden_dropout_probrî   r  s      €r(   r|   zClapAudioOutput.__init__5  sF   ø€ Ü‰ÑÔÜ—Y‘Yœs 6×#3Ñ#3°cÑ#9Ó:¸CÓ@ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r*   r"   rL   c                 óJ   — | j                  |«      }| j                  |«      }|S rz   r  r;  s     r(   r‹   zClapAudioOutput.forward:  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr*   r  r�   s   @r(   r?  r?  4  s#   ø„ ô>ð
 U§\¡\ð °e·l±l÷ 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ej                     dee   d	ee   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€   )r{   r|   Úchunk_size_feed_forwardÚ
shift_sizer4   Úinput_resolutionr	   r¼   Úlayer_norm_epsÚlayernorm_beforer   Ú	attentionrx   r½   Ú	drop_pathÚlayernorm_afterr3  Úintermediater?  rŠ   )rr   r�   r>   rJ  rï   Údrop_path_raterI  r~   s          €r(   r|   zClapAudioLayer.__init__B  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   rI  rA   ÚjitÚ
is_tracingÚtensor)rr   rJ  s     r(   Úset_shift_and_window_sizez(ClapAudioLayer.set_shift_and_window_sizeO  s\   € ÜÐÓ  D×$4Ñ$4Ò4ä'¨›lˆDŒOä=B¿Y¹Y×=QÑ=QÔ=S”—	‘	œ%Ÿ,™,Ð'7Ó8Ô9ÔY\Ð]mÓYnð Õð 5r*   c           	      ó  — | j                   dkD  �rzt        j                  d||df||¬«      }t        d| j                   «      t        | j                   | j                    «      t        | j                    d «      f}t        d| j                   «      t        | j                   | j                    «      t        | j                    d «      f}d}|D ]  }	|D ]  }
||d d …|	|
d d …f<   |dz  }Œ Œ t        || j                  «      }|j                  d| j                  | j                  z  «      }|j                  d«      |j                  d«      z
  }|j                  |dk7  t        d«      «      j                  |dk(  t        d«      «      }|S d }|S )Nr   r   r�   r/   r,   g      YÀr€   )
rI  rA   râ   Úslicer4   r9   r1   r  Úmasked_fillÚfloat)rr   r5   r6   r‚   rO   Úimg_maskÚheight_slicesÚwidth_slicesÚcountÚheight_sliceÚwidth_sliceÚmask_windowsÚ	attn_masks                r(   Úget_attn_maskzClapAudioLayer.get_attn_maskW  s—  € Ø�?‰?˜QÓä—{‘{ A v¨u°aÐ#8ÀÈfÔUˆHä�a˜$×*Ñ*Ð*Ó+Ü�t×'Ñ'Ð'¨$¯/©/Ð)9Ó:Ü�t—‘Ð&¨Ó-ðˆMô �a˜$×*Ñ*Ð*Ó+Ü�t×'Ñ'Ð'¨$¯/©/Ð)9Ó:Ü�t—‘Ð&¨Ó-ðˆLð
 ˆEØ -ò �Ø#/ò �KØ@E�HšQ ¨kº1Ð<Ñ=Ø˜Q‘J‘Eñðô
 ,¨H°d×6FÑ6FÓGˆLØ'×,Ñ,¨R°×1AÑ1AÀD×DTÑDTÑ1TÓUˆLØ$×.Ñ.¨qÓ1°L×4JÑ4JÈ1Ó4MÑMˆIØ!×-Ñ-¨i¸1©n¼eÀF»mÓL×XÑXÐYbÐfgÑYgÔinÐorÓisÓtˆIð Ðð ˆIØÐr*   c                 óþ   — | j                   || j                   z  z
  | j                   z  }| j                   || j                   z  z
  | j                   z  }ddd|d|f}t        j                  j                  ||«      }||fS rS  )r4   r	   rR   rÇ   )rr   r"   r5   r6   Ú	pad_rightÚ
pad_bottomÚ
pad_valuess          r(   Ú	maybe_padzClapAudioLayer.maybe_pads  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þ   rÿ   Úalways_partitionrL   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   )rX  rÆ   rL  r1   rj  r   rI  rA   Úrollr9   r4   re  r‚   rO   rM  r;   r3   rN  rO  rP  rŠ   )rr   r"   rk  rþ   rÿ   rl  r5   r6   r$   rÍ   r¢   Úshortcutri  Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsrd  Úattention_outputsr1  Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss                            r(   r‹   zClapAudioLayer.forwardz  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Ø! 9¨iÐK\ð +ó 
Ðð -¨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   ©NFF)r[   r\   r]   r|   rX  re  rj  rA   r  r   r@   r   r_   r  r‹   rŒ   r�   s   @r(   rD  rD  A  s™   ø„ õ3òòò8)ð 26Ø,1Ø+0ñAà—|‘|ðAð    S ™/ðAð ˜E×-Ñ-Ñ.ð	Að
 $ D™>ðAð # 4™.ðAð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷Ar*   rD  c                   ó¤   ‡ — e Zd Zˆ fd„Z	 	 	 d	dej
                  deeef   deej                     dee
   dee
   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}«      | _	        |�& |||t        j                  ¬«      | _        d| _        y d | _        d| _        y c c}w )Nr,   r   )r�   r>   rJ  rï   rQ  rI  )r>   Ú
norm_layerF)r{   r|   r�   r>   r	   Ú
ModuleListÚrangerD  r4   Úblocksr¼   Ú
downsampleÚpointing)
rr   r�   r>   rJ  Údepthrï   rN  r„  Úir~   s
            €r(   r|   zClapAudioStage.__init__À  s·   ø€ Ü‰ÑÔØˆŒØˆŒÜ—m‘mô ˜u›ö
ð ô Ø!ØØ%5Ø'Ø#,¨Q¡<Ø%&¨¡U¨a¢Z™q°f×6HÑ6HÈAÑ6Möò
ó
ˆŒð Ð!Ù(Ð)9¸sÌrÏ|É|Ô\ˆDŒOð ˆ�ð #ˆDŒOàˆ�ùò'
s   º2B/r"   rk  rþ   rÿ   rl  rL   c                 ó  — |\  }}t        | j                  «      D ]  \  }}	|�||   nd }
 |	|||
||«      }|d   }Œ! |}| j                  �)|dz   dz  |dz   dz  }}||||f}| j                  ||«      }n||||f}|||f}|r|dd  z  }|S )Nr   r   r,   )Ú	enumeraterƒ  r„  )rr   r"   rk  rþ   rÿ   rl  r5   r6   r‡  Úlayer_moduleÚlayer_head_maskr{  Ú!hidden_states_before_downsamplingÚheight_downsampledÚwidth_downsampledÚoutput_dimensionsÚstage_outputss                    r(   r‹   zClapAudioStage.forwardÚ  sè   € ð )‰ˆ�Ü(¨¯©Ó5ò 	-‰OˆAˆ|Ø.7Ð.C˜i¨šlÈˆOá(ØÐ/°ÐBSÐUeóˆ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*   r|  )r[   r\   r]   r|   rA   r  r   r@   r   r_   r  r‹   rŒ   r�   s   @r(   r~  r~  ¿  sz   ø„ ôð< 26Ø,1Ø+0ñà—|‘|ðð    S ™/ðð ˜E×-Ñ-Ñ.ð	ð
 $ D™>ðð # 4™.ðð 
ˆu�|‰|Ñ	÷r*   r~  c            	       ó²   ‡ — e Zd ZdZej
                  fdee   dedej                  ddfˆ fd„Z	d„ Z
d	ej                  d
eeef   dej                  fd„Zˆ xZS )ÚClapAudioPatchMerginga'  
    Patch Merging Layer.

    Args:
        input_resolution (`Tuple[int]`):
            Resolution of input feature.
        dim (`int`):
            Number of input channels.
        norm_layer (`nn.Module`, *optional*, defaults to `nn.LayerNorm`):
            Normalization layer class.
    rJ  r>   r€  rL   Nc                 ó¤   •— t         ‰| �  «        || _        || _        t	        j
                  d|z  d|z  d¬«      | _         |d|z  «      | _        y )Nr-   r,   FrÙ   )r{   r|   rJ  r>   r	   rç   Ú	reductionr¾   )rr   rJ  r>   r€  r~   s       €r(   r|   zClapAudioPatchMerging.__init__	  sI   ø€ Ü‰ÑÔØ 0ˆÔØˆŒÜŸ™ 1 s¡7¨A°©G¸%Ô@ˆŒÙ˜q 3™wÓ'ˆ�	r*   c                 óŠ   — |dz  dk(  xs |dz  dk(  }|r.ddd|dz  d|dz  f}t         j                  j                  ||«      }|S )Nr,   r   r   )r	   rR   rÇ   )rr   Úinput_featurer5   r6   Ú
should_padri  s         r(   rj  zClapAudioPatchMerging.maybe_pad  sU   € Ø˜q‘j A‘oÒ:¨5°1©9¸©>ˆ
ÙØ˜Q  5¨1¡9¨a°¸!±Ð<ˆJÜŸM™M×-Ñ-¨m¸ZÓHˆMàÐr*   r–  rk  c                 óº  — |\  }}|j                   \  }}}|j                  ||||«      }| j                  |||«      }|d d …dd d…dd d…d d …f   }|d d …dd d…dd d…d d …f   }	|d d …dd d…dd d…d d …f   }
|d d …dd d…dd d…d d …f   }t        j                  ||	|
|gd«      }|j                  |dd|z  «      }| j                  |«      }| j                  |«      }|S )Nr   r,   r   r/   r-   )r   r1   rj  rA   Úcatr¾   r”  )rr   r–  rk  r5   r6   r$   r>   r7   Úinput_feature_0Úinput_feature_1Úinput_feature_2Úinput_feature_3s               r(   r‹   zClapAudioPatchMerging.forward  s  € Ø(‰ˆ�à(5×(;Ñ(;Ñ%ˆ
�C˜à%×*Ñ*¨:°v¸uÀlÓSˆàŸ™ }°f¸eÓDˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆäŸ	™	 ?°OÀ_ÐVeÐ"fÐhjÓkˆØ%×*Ñ*¨:°r¸1¸|Ñ;KÓLˆàŸ	™	 -Ó0ˆØŸ™ }Ó5ˆàÐr*   )r[   r\   r]   r^   r	   r¼   r   r@   ÚModuler|   rj  rA   r  r‹   rŒ   r�   s   @r(   r’  r’  ü  sr   ø„ ñ
ð XZ×WcÑWcñ (¨¨s©ð (¸#ð (È2Ï9É9ð (Ðhlõ (òð U§\¡\ð ÀUÈ3ÐPSÈ8Á_ð ÐY^×YeÑYe÷ r*   r’  c                   ó¸   ‡ — e Zd Zˆ fd„Zd„ Z	 	 	 	 	 	 	 ddeej                     deej                     dee   dee   dee   dee   d	ee   d
e	e
ef   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 �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   )r�   r>   rJ  r†  rï   rN  r„  F)%r{   r|   rQ   ÚdepthsÚ
num_layersr�   r«   Úpatch_embedr·   r±   r¯   Únum_mel_binsÚ
freq_ratior@   r—   Únum_featuresrA   ÚlinspacerQ  rå   Úitemr³   r‚  Úinput_resolutionsr	   r�  r~  rÛ   r’  ÚlayersÚgradient_checkpointingr›   Ú
batch_normr¼   r¾   ÚAdaptiveAvgPool1dÚavgpool)rr   r�   rù   rQ  r³   r‡  Úi_layerr~   s          €r(   r|   zClapAudioEncoder.__init__3  sT  ø€ Ü‰ÑÔÜ˜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Ó,hÖi q˜!Ÿ&™&�(ÐiˆÐià×$Ñ$×.Ñ.ˆ	Ü\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 jùò "tùòs   Ã?J:ÅJ?Æ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   r@   r¯   r¦  rÅ   r	   rR   r)   r!   r2   r3   )rr   Únormalized_input_featuresrÍ   r%   Úfreq_lengthÚ
spec_widthÚspec_heigthÚ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*   Ú	is_longerrþ   rÿ   Úoutput_hidden_statesÚ(output_hidden_states_before_downsamplingrl  Úreturn_dictrL   c	                 óœ  — |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 �]"  \  }}|�||   nd }| j                  |   }| j                  r,| j                   r | j#                  |j$                  ||||«      }n ||||||«      }|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/                  «       j1                  ||||«      }|j                  \  }}} }!| | j2                  z  }"|j1                  ||| |"z  |"|!«      }|j                  ddddd«      j/                  «       j1                  |||"d«      }| j5                  t        j6                  |d«      «      }#t        j6                  |#d«      }#|st9        d	„ ||#||fD «       «      S t;        ||#||¬
«      S )Nr   r
   r   r,   ra   r  r/   r-   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wrz   ra   ©rp   Úvs     r(   rs   z+ClapAudioEncoder.forward.<locals>.<genexpr>é  s   è ø€ ò 	àð �=ô ñ	ùó   ‚)rY   Úpooler_outputr"   rZ   )rÈ   r­  r·   ÚtorO   rA   Úwherer¼  r   r¤  rª  r1   r2   r‰  r«  r¬  rƒ   Ú_gradient_checkpointing_funcÚ__call__r¾   rQ   r¢  r±   r3   r!   r¦  r¯  r¶   rt   r   )$rr   Úinput_featuresr½  rþ   rÿ   r¾  r¿  rl  rÀ  rµ  Úis_longer_list_idxÚis_longer_listr"   Ú
frames_numÚall_hidden_statesÚall_reshaped_hidden_statesÚall_self_attentionsrk  r$   rÍ   Úhidden_sizeÚreshaped_hidden_stater‡  rŠ  r‹  r{  rŒ  r�  rY   Ú
n_channelsÚ
freq_shapeÚtemporal_shapeÚn_frequenciesÚn_tempÚ
c_freq_binÚlatent_outputs$                                       r(   r‹   zClapAudioEncoder.forward  s´  € ð (×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ˆ|Ø.7Ð.C˜i¨šlÈˆOà#×5Ñ5°aÑ8Ðà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)¨=Ð:JÈOÐ]nó!‘ñ !-Ø!Ð#3°_ÐFWÐYió!�ð *¨!Ñ,ˆ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Ò#ðQ(	9ðT !Ÿ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*   )NNFFFFT)r[   r\   r]   r|   r¼  r   rA   r_   r  r   r   rc   r‹   rŒ   r�   s   @r(   r   r   2  s¹   ø„ ô&/òP")ðN 26Ø15Ø,1Ø/4ØCHØ+0Ø&*ñz
ð ˜E×-Ñ-Ñ.ðz
ð ˜E×-Ñ-Ñ.ð	z
ð
 $ D™>ðz
ð ' t™nðz
ð 3;¸4±.ðz
ð # 4™.ðz
ð ˜d‘^ðz
ð 
ˆuÐ*Ð*Ñ	+÷z
r*   r   a=  
    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads
    etc.)

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

    Parameters:
        config ([`ClapConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aƒ  
    Args:
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
            it.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

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

            [What are attention masks?](../glossary#attention-mask)
        position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
a6  
    Args:
        input_features (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Input audio features. This should be returnes by the [`ClapFeatureExtractor`] class that you can also
            retrieve from [`AutoFeatureExtractor`]. See [`ClapFeatureExtractor.__call__`] for details.
        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.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
a$  
    Args:
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
            it.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

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

            [What are attention masks?](../glossary#attention-mask)
        position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        input_features (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Input audio features. This should be returnes by the [`ClapFeatureExtractor`] class that you can also
            retrieve from [`AutoFeatureExtractor`]. See [`ClapFeatureExtractor.__call__`] for details.
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
c                   ó4   ‡ — e Zd Zdeeef   fˆ fd„Zd„ Zˆ xZS )ÚClapProjectionLayerr�   c                 óü   •— t         ‰| �  «        || _        |j                  }|j                  }t        j                  ||«      | _        t        |j                     | _
        t        j                  ||«      | _        y rz   )r{   r|   r�   rÒ  Úprojection_dimr	   rç   Úlinear1r   Úprojection_hidden_actÚ
activationÚlinear2)rr   r�   rÒ  rÞ  r~   s       €r(   r|   zClapProjectionLayer.__init__d  sa   ø€ Ü‰ÑÔØˆŒØ×(Ñ(ˆØ×.Ñ.ˆä—y‘y ¨nÓ=ˆŒÜ  ×!=Ñ!=Ñ>ˆŒÜ—y‘y °Ó@ˆ�r*   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rz   )rß  rá  râ  r;  s     r(   r‹   zClapProjectionLayer.forwardn  s2   € ØŸ™ ]Ó3ˆØŸ™¨Ó6ˆØŸ™ ]Ó3ˆØÐr*   )	r[   r\   r]   r   r   r   r|   r‹   rŒ   r�   s   @r(   rÜ  rÜ  c  s    ø„ ðA˜u _°nÐ%DÑEõ Aör*   rÜ  c                   ó2   ‡ — e Zd ZdZˆ fd„Z	 dd„Zd„ Zˆ xZS )ÚClapTextEmbeddingszV
    Same as BertEmbeddings with a tiny tweak for positional embeddings indexing.
    c                 óÖ  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        t#        |dd«      | _        | j'                  dt)        j*                  |j                  «      j-                  d«      d¬«       | j'                  d	t)        j.                  | j0                  j3                  «       t(        j4                  ¬
«      d¬«       |j                  | _        t        j                  |j                  |j
                  | j6                  ¬«      | _	        y )N)rF   rF  Úposition_embedding_typeÚabsoluteÚposition_ids)r   r/   T)Ú
persistentÚtoken_type_ids©r‚   )r{   r|   r	   Ú	EmbeddingÚ
vocab_sizerÒ  Úpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsr¼   rK  rì   rA  rî   rn   rç  ræ   rA   rP   Úexpandrâ   ré  rÆ   rD   rF   ©rr   r�   r~   s     €r(   r|   zClapTextEmbeddings.__init__|  si  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"ô Ÿ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒä'.¨vÐ7PÐR\Ó']ˆÔ$Ø×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐeið 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbfð 	ô 	
ð
 "×.Ñ.ˆÔÜ#%§<¡<Ø×*Ñ*¨F×,>Ñ,>ÈD×L\ÑL\ô$
ˆÕ r*   c                 ó€  — |€+|�t        || j                  |«      }n| j                  |«      }|�|j                  «       }n|j                  «       d d }|d   }|€st	        | d«      r-| j
                  d d …d |…f   }|j                  |d   |«      }	|	}n:t        j                  |t        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }
||
z   }| j                  dk(  r| j                  |«      }||z  }| j!                  |«      }| j#                  |«      }|S )Nr/   r   rë  r   r�   rè  )rJ   rF   Ú&create_position_ids_from_inputs_embedsrÆ   Úhasattrrë  rõ  rA   râ   rD   ré  rO   rð  rô  rç  rò  r¼   rî   )rr   rE   rë  ré  Úinputs_embedsrG   Úinput_shapeÚ
seq_lengthÚbuffered_token_type_idsÚ buffered_token_type_ids_expandedrô  Ú
embeddingsrò  s                r(   r‹   zClapTextEmbeddings.forward•  sR  € ð ÐØÐ$äAÀ)ÈT×M]ÑM]Ð_uÓv‘à#×JÑJÈ=ÓY�àÐ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
ð
 Ð!Ü�tÐ-Ô.Ø*.×*=Ñ*=ºaÀÀ*À¸nÑ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÑR`ÐblÓ3mÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐà"Ð%:Ñ:ˆ
Ø×'Ñ'¨:Ò5Ø"&×":Ñ":¸<Ó"HÐØÐ-Ñ-ˆJØ—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr*   c                 ó  — |j                  «       dd }|d   }t        j                  | j                  dz   || j                  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   rP   rF   rD   rO   r  rõ  )rr   rú  rû  Úsequence_lengthré  s        r(   rø  z9ClapTextEmbeddings.create_position_ids_from_inputs_embeds½  s€   € ð $×(Ñ(Ó*¨3¨BÐ/ˆØ% a™.ˆä—|‘|Ø×Ñ˜qÑ  /°D×4DÑ4DÑ"DÀqÑ"HÔPU×PZÑPZÐcp×cwÑcwô
ˆð ×%Ñ% aÓ(×/Ñ/°Ó<Ð<r*   )NNNNr   )r[   r\   r]   r^   r|   r‹   rø  rŒ   r�   s   @r(   rå  rå  v  s   ø„ ñô

ð4 rsó&öP=r*   rå  c                   óP  ‡ — e Zd Zdˆ fd„	Zdej
                  dej
                  fd„Z	 	 	 	 	 	 ddej
                  deej                     deej                     deej                     d	eej                     d
ee	e	ej                           dee
   de	ej
                     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                  «      | _        |xs t#        |dd«      | _        | j$                  dk(  s| j$                  d	k(  rF|j&                  | _        t        j(                  d
|j&                  z  dz
  | j                  «      | _        |j,                  | _        y )Nr   Úembedding_sizerÓ   rÔ   rÕ   rç  rè  Úrelative_keyÚrelative_key_queryr,   r   )r{   r|   rÒ  rÛ   rù  rÅ   r@   rÜ   rÝ   r	   rç   ré   rê   rë   rì   rí   rî   rn   rç  rñ  rí  Údistance_embeddingÚ
is_decoder©rr   r�   rç  r~   s      €r(   r|   zClapTextSelfAttention.__init__Ñ  s�  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸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ˆŒØ'>ò (
Ä'ØÐ-¨zóC
ˆÔ$ð ×'Ñ'¨>Ò9¸T×=YÑ=YÐ]qÒ=qØ+1×+IÑ+IˆDÔ(Ü&(§l¡l°1°v×7UÑ7UÑ3UÐXYÑ3YÐ[_×[sÑ[sÓ&tˆDÔ#à ×+Ñ+ˆ�r*   rù   rL   c                 ó¤   — |j                  «       d d | j                  | j                  fz   }|j                  |«      }|j	                  dddd«      S rö   r÷   rø   s      r(   rû   z*ClapTextSelfAttention.transpose_for_scoresë  rü   r*   r"   rý   rþ   Úencoder_hidden_statesÚencoder_attention_maskÚpast_key_valuerÿ   c                 ó$  — | j                  |«      }|d u}	|	r|�|d   }
|d   }|}�n |	rC| j                  | j                  |«      «      }
| j                  | j                  |«      «      }|}n»|�y| j                  | j                  |«      «      }
| j                  | j                  |«      «      }t	        j
                  |d   |
gd¬«      }
t	        j
                  |d   |gd¬«      }n@| j                  | j                  |«      «      }
| j                  | j                  |«      «      }| j                  |«      }|d u}| j                  r|
|f}t	        j                  ||
j                  dd«      «      }| j                  dk(  s| j                  dk(  �r—|j                  d   |
j                  d   }}|rDt	        j                  |dz
  t        j                  |j                  ¬	«      j                  dd«      }n@t	        j                  |t        j                  |j                  ¬	«      j                  dd«      }t	        j                  |t        j                  |j                  ¬	«      j                  dd«      }||z
  }| j!                  || j"                  z   dz
  «      }|j%                  |j&                  ¬
«      }| j                  dk(  rt	        j(                  d||«      }||z   }nE| j                  dk(  r6t	        j(                  d||«      }t	        j(                  d|
|«      }||z   |z   }|t+        j,                  | j.                  «      z  }|�||z   }t0        j2                  j5                  |d¬«      }| j7                  |«      }|�||z  }t	        j                  ||«      }|j9                  dddd«      j;                  «       }|j=                  «       d d | j>                  fz   }|j                  |«      }|r||fn|f}| j                  r||fz   }|S )Nr   r   r,   r=   r/   r  r  r  r�   rì  zbhld,lrd->bhlrzbhrd,lrd->bhlrr
   ) ré   rû   rê   rë   rA   r™  r	  r  rÈ   rç  r   rW  rD   rO   r1   rP   r  rñ  rÇ  r‚   Úeinsumr  r  rÜ   r	   rR   r  rî   r2   r3   rÆ   rÝ   )rr   r"   rý   rþ   r  r  r  rÿ   r  Úis_cross_attentionr  r	  r
  Ú	use_cacher  Úquery_lengthÚ
key_lengthÚposition_ids_lÚposition_ids_rÚdistanceÚpositional_embeddingÚrelative_position_scoresÚrelative_position_scores_queryÚrelative_position_scores_keyr  r  r  r  s                               r(   r‹   zClapTextSelfAttention.forwardð  sç  € ð !ŸJ™J }Ó5Ðð
 3¸$Ð>Ðá .Ð"<à& qÑ)ˆIØ(¨Ñ+ˆKØ3ŠNÙØ×1Ñ1°$·(±(Ð;PÓ2QÓRˆIØ×3Ñ3°D·J±JÐ?TÓ4UÓVˆKØ3‰NØÐ'Ø×1Ñ1°$·(±(¸=Ó2IÓJˆIØ×3Ñ3°D·J±J¸}Ó4MÓNˆKÜŸ	™	 >°!Ñ#4°iÐ"@ÀaÔHˆIÜŸ)™) ^°AÑ%6¸Ð$DÈ!ÔL‰Kà×1Ñ1°$·(±(¸=Ó2IÓJˆIØ×3Ñ3°D·J±J¸}Ó4MÓNˆKà×/Ñ/Ð0AÓBˆà"¨$Ð.ˆ	Ø�?Š?ð (¨Ð5ˆNô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà×'Ñ'¨>Ò9¸T×=YÑ=YÐ]qÓ=qØ'2×'8Ñ'8¸Ñ';¸Y¿_¹_ÈQÑ=O˜*ˆLÙÜ!&§¡¨j¸1©nÄEÇJÁJÐWd×WkÑWkÔ!l×!qÑ!qØ˜ó"‘ô "'§¡¨lÄ%Ç*Á*ÐUb×UiÑUiÔ!j×!oÑ!oÐprÐtuÓ!v�Ü"Ÿ\™\¨*¼E¿J¹JÈ}×OcÑOcÔd×iÑiÐjkÐmoÓpˆNØ%¨Ñ6ˆHà#'×#:Ñ#:¸8Àd×FbÑFbÑ;bÐefÑ;fÓ#gÐ Ø#7×#:Ñ#:À×ARÑARÐ#:Ó#SÐ à×+Ñ+¨~Ò=Ü+0¯<©<Ð8HÈ+ÐWkÓ+lÐ(Ø#3Ð6NÑ#NÑ Ø×-Ñ-Ð1EÒEÜ16·±Ð>NÐP[Ð]qÓ1rÐ.Ü/4¯|©|Ð<LÈiÐYmÓ/nÐ,Ø#3Ð6TÑ#TÐWsÑ#sÐ à+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.Ñ@Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆá6G�= /Ñ2ÈmÐM]ˆà�?Š?Ø Ð 1Ñ1ˆGØˆr*   rz   ©NNNNNF)r[   r\   r]   r|   rA   r  rû   r   r_   r   r  r‹   rŒ   r�   s   @r(   r  r  Ð  så   ø„ õ,ð4% e§l¡lð %°u·|±|ó %ð 7;Ø15Ø=AØ>BØDHØ,1ñcà—|‘|ðcð ! ×!2Ñ!2Ñ3ðcð ˜E×-Ñ-Ñ.ð	cð
  (¨×(9Ñ(9Ñ:ðcð !)¨×):Ñ):Ñ ;ðcð !  u¨U×->Ñ->Ñ'?Ñ!@ÑAðcð $ D™>ðcð 
ˆu�|‰|Ñ	÷c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 ©NrF  )r{   r|   r	   rç   rÒ  r  r¼   rK  rì   rA  rî   rö  s     €r(   r|   zClapTextSelfOutput.__init__X  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r*   r"   r  rL   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rz   ©r  rî   r¼   r  s      r(   r‹   zClapTextSelfOutput.forward^  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr*   r  r�   s   @r(   r  r  W  ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r*   r  Úeagerc                   ó  ‡ — e Zd Zdˆ fd„	Zd„ Z	 	 	 	 	 	 ddej                  deej                     deej                     deej                     deej                     dee	e	ej                           d	ee
   d
e	ej                     fd„Zˆ xZS )ÚClapTextAttentionc                 óž   •— t         ‰| �  «        t        |j                     ||¬«      | _        t        |«      | _        t        «       | _        y )N©rç  )	r{   r|   Ú CLAP_TEXT_SELF_ATTENTION_CLASSESÚ_attn_implementationrr   r  rŠ   r"  r#  r
  s      €r(   r|   zClapTextAttention.__init__l  sC   ø€ Ü‰ÑÔÜ4°V×5PÑ5PÑQØÐ,Cô
ˆŒ	ô )¨Ó0ˆŒÜ›EˆÕr*   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y r%  r&  r(  s      r(   r+  zClapTextAttention.prune_headst  r,  r*   r"   rý   rþ   r  r  r  rÿ   rL   c           	      óp   — | j                  |||||||«      }| j                  |d   |«      }	|	f|dd  z   }
|
S r.  r/  )rr   r"   rý   rþ   r  r  r  rÿ   r0  r1  r  s              r(   r‹   zClapTextAttention.forward†  sW   € ð —y‘yØØØØ!Ø"ØØó
ˆð  Ÿ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr*   rz   r  )r[   r\   r]   r|   r+  rA   r  r   r_   r   r  r‹   rŒ   r�   s   @r(   r'  r'  k  sÆ   ø„ õ"ò;ð* 7;Ø15Ø=AØ>BØDHØ,1ñà—|‘|ðð ! ×!2Ñ!2Ñ3ðð ˜E×-Ñ-Ñ.ð	ð
  (¨×(9Ñ(9Ñ:ðð !)¨×):Ñ):Ñ ;ðð !  u¨U×->Ñ->Ñ'?Ñ!@ÑAðð $ D™>ðð 
ˆu�|‰|Ñ	÷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 rz   )r{   r|   r	   rç   rÒ  Úintermediate_sizer  r®   r6  r7  r   r8  rö  s     €r(   r|   zClapTextIntermediate.__init__   s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r*   r"   rL   c                 óJ   — | j                  |«      }| j                  |«      }|S rz   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   )r{   r|   r	   rç   r1  rÒ  r  r¼   rK  rì   rA  rî   rö  s     €r(   r|   zClapTextOutput.__init__°  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r*   r"   r  rL   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rz   r"  r  s      r(   r‹   zClapTextOutput.forward¶  r#  r*   r  r�   s   @r(   r4  r4  ¯  r$  r*   r4  c                   ó  ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 ddej
                  deej                     deej                     deej                     deej                     deeeej                           dee	   d	eej
                     fd
„Z
d„ Zˆ xZS )ÚClapTextLayerc                 óf  •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        |j                  | _        |j                  | _        | j                  r,| j                  st        | › d�«      ‚t	        |d¬«      | _	        t        |«      | _        t        |«      | _        y )Nr   z> should be used as a decoder model if cross attention is addedrè  r)  )r{   r|   rH  Úseq_len_dimr'  rM  r	  Úadd_cross_attentionrÅ   Úcrossattentionr/  rP  r4  rŠ   rö  s     €r(   r|   zClapTextLayer.__init__¿  s—   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6Ó2ˆŒØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø×#Ò#Ø—?’?Ü  D 6Ð)gÐ!hÓiÐiÜ"3°FÐT^Ô"_ˆDÔÜ0°Ó8ˆÔÜ$ VÓ,ˆ�r*   r"   rý   rþ   r  r  r  rÿ   rL   c           	      óÒ  — |�|d d nd }| j                  |||||¬«      }	|	d   }
| j                  r|	dd }|	d   }n|	dd  }d }| j                  rT|�Rt        | d«      st        d| › d�«      ‚|�|d	d  nd }| j	                  |
||||||«      }|d   }
||dd z   }|d   }|z   }t        | j                  | j                  | j                  |
«      }|f|z   }| j                  r|fz   }|S )
Nr,   )rÿ   r  r   r   r/   r<  z'If `encoder_hidden_states` are passed, z` has to be instantiated with cross-attention layers by setting `config.add_cross_attention=True`r  )	rM  r	  rù  rÅ   r<  r   Úfeed_forward_chunkrH  r:  )rr   r"   rý   rþ   r  r  r  rÿ   Úself_attn_past_key_valueÚself_attention_outputsr1  r  Úpresent_key_valueÚcross_attn_present_key_valueÚcross_attn_past_key_valueÚcross_attention_outputsrz  s                    r(   r‹   zClapTextLayer.forwardÍ  s}  € ð :HÐ9S >°"°1Ñ#5ÐY]Ð Ø!%§¡ØØØØ/Ø3ð "0ó "
Ðð 2°!Ñ4Ðð �?Š?Ø,¨Q¨rÐ2ˆGØ 6°rÑ :Ñà,¨Q¨RÐ0ˆGà'+Ð$Ø�?Š?Ð4Ð@Ü˜4Ð!1Ô2Ü Ø=¸d¸Vð DDð Dóð ð @NÐ?Y¨°r°sÑ(;Ð_cÐ%Ø&*×&9Ñ&9Ø ØØØ%Ø&Ø)Ø!ó'Ð#ð  7°qÑ9ÐØÐ 7¸¸"Ð =Ñ=ˆGð ,CÀ2Ñ+FÐ(Ø 1Ð4PÑ PÐä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð  �/ GÑ+ˆð �?Š?ØÐ!2Ð 4Ñ4ˆGàˆr*   c                 óL   — | j                  |«      }| j                  ||«      }|S rz   )rP  rŠ   )rr   r1  Úintermediate_outputrz  s       r(   r>  z ClapTextLayer.feed_forward_chunk  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr*   r  )r[   r\   r]   r|   rA   r  r   r_   r   r  r‹   r>  rŒ   r�   s   @r(   r8  r8  ¾  sÇ   ø„ ô-ð" 7;Ø15Ø=AØ>BØDHØ,1ñ?à—|‘|ð?ð ! ×!2Ñ!2Ñ3ð?ð ˜E×-Ñ-Ñ.ð	?ð
  (¨×(9Ñ(9Ñ:ð?ð !)¨×):Ñ):Ñ ;ð?ð !  u¨U×->Ñ->Ñ'?Ñ!@ÑAð?ð $ D™>ð?ð 
ˆu�|‰|Ñ	ó?öBr*   r8  c                   óD  ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 	 	 	 ddej
                  deej                     deej                     deej                     deej                     deeeej                           dee	   d	ee	   d
ee	   dee	   de
eej
                     ef   fd„Zˆ xZS )ÚClapTextEncoderc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w )NF)
r{   r|   r�   r	   r�  r‚  Únum_hidden_layersr8  Úlayerr¬  )rr   r�   rÍ   r~   s      €r(   r|   zClapTextEncoder.__init__  sN   ø€ Ü‰ÑÔØˆŒÜ—]‘]Ä5È×IaÑIaÓCbÖ#c¸a¤M°&Õ$9Ò#cÓdˆŒ
Ø&+ˆÕ#ùò $ds   ½A#r"   rý   rþ   r  r  Úpast_key_valuesr  rÿ   r¾  rÀ  rL   c                 óš  — |	rdnd }|rdnd }|r| j                   j                  rdnd }| j                  r%| j                  r|rt        j                  d«       d}|rdnd }t        | j                  «      D ]¤  \  }}|	r||fz   }|�||   nd }|�||   nd }| j                  r/| j                  r#| j                  |j                  |||||||«      }n ||||||||«      }|d   }|r	||d   fz  }|sŒ|||d   fz   }| j                   j                  sŒœ||d   fz   }Œ¦ |	r||fz   }|
st        d„ |||||fD «       «      S t        |||||¬	«      S )
Nra   zZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...Fr   r/   r   r,   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wrz   ra   rÃ  s     r(   rs   z*ClapTextEncoder.forward.<locals>.<genexpr>^  s   è ø€ ò 
àð �=ô ñ
ùrÅ  )rY   rL  r"   rZ   Úcross_attentions)r�   r;  r¬  rƒ   ÚloggerÚwarning_oncer‰  rK  rÉ  rÊ  rt   r   )rr   r"   rý   rþ   r  r  rL  r  rÿ   r¾  rÀ  rÏ  rÑ  Úall_cross_attentionsÚnext_decoder_cacher‡  rŠ  r‹  r  r{  s                       r(   r‹   zClapTextEncoder.forward  sÎ  € ñ #7™B¸DÐÙ$5™b¸4ÐÙ%6¸4¿;¹;×;ZÒ;Z™rÐ`dÐà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	á#,™R°$ÐÜ(¨¯©Ó4ò #	V‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!à.7Ð.C˜i¨šlÈˆOØ3BÐ3N˜_¨QÒ/ÐTXˆNà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø"Ø#Ø)Ø*Ø"Ø%ó	!‘ñ !-Ø!Ø"Ø#Ø)Ø*Ø"Ø%ó!�ð *¨!Ñ,ˆMÙØ" }°RÑ'8Ð&:Ñ:Ð"Ú Ø&9¸]È1Ñ=MÐ<OÑ&OÐ#Ø—;‘;×2Ó2Ø+?À=ÐQRÑCSÐBUÑ+UÑ(ðG#	VñJ  Ø 1°]Ð4DÑ DÐáÜñ 
ð "Ø&Ø%Ø'Ø(ðô
ó 
ð 
ô 9Ø+Ø.Ø+Ø*Ø1ô
ð 	
r*   )	NNNNNNFFT)r[   r\   r]   r|   rA   r  r   r_   r   r  r   r   r‹   rŒ   r�   s   @r(   rH  rH    s  ø„ ô,ð 7;Ø15Ø=AØ>BØEIØ$(Ø,1Ø/4Ø&*ñS
à—|‘|ðS
ð ! ×!2Ñ!2Ñ3ðS
ð ˜E×-Ñ-Ñ.ð	S
ð
  (¨×(9Ñ(9Ñ:ðS
ð !)¨×):Ñ):Ñ ;ðS
ð " %¨¨e×.?Ñ.?Ñ(@Ñ"AÑBðS
ð ˜D‘>ðS
ð $ D™>ðS
ð ' t™nðS
ð ˜d‘^ðS
ð 
ˆu�U—\‘\Ñ"Ð$MÐMÑ	N÷S
r*   rH  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 rz   )r{   r|   r	   rç   rÒ  r  ÚTanhrá  rö  s     €r(   r|   zClapTextPooler.__init__t  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r*   r"   rL   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S rS  )r  rá  )rr   r"   Úfirst_token_tensorÚpooled_outputs       r(   r‹   zClapTextPooler.forwardy  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr*   r  r�   s   @r(   rU  rU  s  s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ r*   rU  c                   ó"   — e Zd ZdZeZdZdZd„ Zy)ÚClapPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚclapFc                 óÎ  — | j                   j                  }t        |t        «      ri|j                  j
                  j                  j                  d|dz  ¬«       |j                  j
                  j                  j                  d|dz  ¬«       yt        |t        «      r]t        j                  j                  |j                  |dz  ¬«       t        j                  j                  |j                  |dz  ¬«       yt        |t        j                  «      r+|j
                  j                  j                  d|dz  ¬«       yt        |t        j                  «      rJ|j                   j                  j#                  «        |j
                  j                  j%                  d«       yt        |t        j&                  t        j(                  f«      r–| j                   j*                  dz  d| j                   j,                  z  dz  z  |z  }t        j                  j                  |j
                  |¬«       |j                   �%|j                   j                  j#                  «        yyy)	zInitialize the weightsr€   g{®Gáz”?)ÚmeanÚstd)r`  g      ð?g      à¿r,   N)r�   Úinitializer_factorr®   rå  rò  ÚweightÚdataÚnormal_rô  Ú	ClapModelr	   ÚinitÚlogit_scale_aÚlogit_scale_trí  r¼   rÚ   Úzero_Úfill_rš   rç   rÒ  rJ  )rr   ÚmoduleÚfactorÚin_proj_stds       r(   Ú_init_weightsz!ClapPreTrainedModel._init_weightsŒ  s®  € à—‘×/Ñ/ˆä�fÔ0Ô1Ø×&Ñ&×-Ñ-×2Ñ2×:Ñ:ÀÈÐRVÉÐ:ÔWØ×(Ñ(×/Ñ/×4Ñ4×<Ñ<À#È6ÐTXÉ=Ð<ÕYÜ˜¤	Ô*Ü�G‰G�O‰O˜F×0Ñ0°f¸t±mˆOÔDÜ�G‰G�O‰O˜F×0Ñ0°f¸t±mˆOÕDÜ˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°V¸d±]Ð&ÕCä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤§¡¬B¯I©IÐ 6Ô7ØŸ;™;×2Ñ2°DÑ8¸aÀ$Ç+Á+×B_ÑB_Ñ>_ÐdhÑ=hÑiÐlrÑrˆKÜ�G‰G�O‰O˜FŸM™M¨{ˆOÔ;Ø�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ð 8r*   N)	r[   r\   r]   r^   r   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingrn  ra   r*   r(   r\  r\  ‚  s   „ ñð
 €LØÐØ&+Ð#ó)r*   r\  c                   óø   ‡ — e Zd ZeZdZdefˆ fd„Zdej                  fd„Z	 e
e«       eee¬«      	 	 	 	 	 ddeej                      deej"                     dee   d	ee   d
ee   deeef   fd„«       «       Zˆ xZS )ÚClapAudioModelrË  r�   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rz   )r{   r|   r   Úaudio_encoderÚ	post_initrö  s     €r(   r|   zClapAudioModel.__init__§  s'   ø€ Ü‰Ñ˜Ô Ü-¨fÓ5ˆÔà�‰Õr*   rL   c                 óB   — | j                   j                  j                  S rz   )ru  r¤  rº   rv   s    r(   Úget_input_embeddingsz#ClapAudioModel.get_input_embeddings­  s   € Ø×!Ñ!×-Ñ-×2Ñ2Ð2r*   ©Úoutput_typero  r½  rÿ   r¾  rÀ  c                 óÊ   — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |||||¬«      S )a”  
        Returns:

        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(audios=audio_sample, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        ```©rË  r½  rÿ   r¾  rÀ  )r�   Úuse_return_dictrÿ   r¾  ru  )rr   rË  r½  rÿ   r¾  rÀ  s         r(   r‹   zClapAudioModel.forward°  sx   € ð< &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ1BÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð ×!Ñ!Ø)ØØ/Ø!5Ø#ð "ó 
ð 	
r*   ©NNNNN)r[   r\   r]   r   ro  Úmain_input_namer|   r	   rž  rx  r   ÚCLAP_AUDIO_INPUTS_DOCSTRINGr   r   r   rA   r_   Ú
BoolTensorr  r   r   r‹   rŒ   r�   s   @r(   rs  rs  £  sÎ   ø„ Ø"€LØ&€Oð˜õ ð3 b§i¡ió 3ñ +Ð+FÓGÙÐ+EÐTcÔdð 7;Ø04Ø,0Ø/3Ø&*ñ(
à  ×!2Ñ!2Ñ3ð(
ð ˜E×,Ñ,Ñ-ð(
ð $ D™>ð	(
ð
 ' t™nð(
ð ˜d‘^ð(
ð 
ˆuÐ0Ð0Ñ	1ò(
ó eó Hô(
r*   rs  c                   ó¼  ‡ — e Zd ZdZeZdˆ fd„	Zd„ Zd„ Z	 	 	 	 	 	 	 	 	 	 	 	 	 dde	e
j                     de	e
j                     de	e
j                     de	e
j                     d	e	e
j                     d
e	e
j                     de	e
j                     de	e
j                     de	ee
j                        de	e   de	e   de	e   de	e   deee
j                     ef   fd„Zˆ xZS )ÚClapTextModela*  

    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://arxiv.org/abs/1706.03762

    c                 óº   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |rt        |«      nd | _        | j                  «        y rz   )
r{   r|   r�   rå  rÿ  rH  ÚencoderrU  Úpoolerrv  )rr   r�   Úadd_pooling_layerr~   s      €r(   r|   zClapTextModel.__init__ï  sK   ø€ Ü‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒá0A”n VÔ,ÀtˆŒð 	�‰Õr*   c                 ó.   — | j                   j                  S rz   ©rÿ  rð  rv   s    r(   rx  z"ClapTextModel.get_input_embeddingsû  s   € Ø�‰×.Ñ.Ð.r*   c                 ó&   — || j                   _        y rz   r‰  ©rr   rë   s     r(   Úset_input_embeddingsz"ClapTextModel.set_input_embeddingsþ  s   € Ø*/ˆ�‰Õ'r*   rE   rý   rë  ré  rþ   rú  r  r  rL  r  rÿ   r¾  rÀ  rL   c                 óœ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j                   j                  r|
�|
n| j                   j
                  }
nd}
|�|�t        d«      ‚|�#| j                  ||«       |j                  «       }n!|�|j                  «       dd }nt        d«      ‚|\  }}|�|j                  n|j                  }|	�|	d   d   j                  d   nd}|€t        j                  |||z   f|¬«      }|€pt        | j                  d	«      r4| j                  j                  dd…d|…f   }|j!                  ||«      }|}n&t        j"                  |t        j$                  |¬
«      }| j'                  ||«      }| j                   j                  rE|�C|j                  «       \  }}}||f}|€t        j                  ||¬«      }| j)                  |«      }nd}| j+                  || j                   j,                  «      }| j                  |||||¬«      }| j/                  ||||||	|
|||¬«
      }|d   }| j0                  �| j1                  |«      nd}|s
||f|dd z   S t3        |||j4                  |j6                  |j8                  |j:                  ¬«      S )a  
        encoder_hidden_states  (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
            Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention if
            the model is configured as a decoder.
        encoder_attention_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing attention on the padding token indices of the encoder input. This mask is used in
            the cross-attention if the model is configured as a decoder. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.
        past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`):
            Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding.

            If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that
            don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all
            `decoder_input_ids` of shape `(batch_size, sequence_length)`.
        use_cache (`bool`, *optional*):
            If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see
            `past_key_values`).
        NFzDYou cannot specify both input_ids and inputs_embeds at the same timer/   z5You have to specify either input_ids or inputs_embedsr   r,   rN   rë  r�   )rE   ré  rë  rú  rG   )	rý   rþ   r  r  rL  r  rÿ   r¾  rÀ  r   )rY   rÆ  rL  r"   rZ   rO  )r�   rÿ   r¾  r}  r	  r  rÅ   Ú%warn_if_padding_and_no_attention_maskrÆ   rO   r   rA   Úonesrù  rÿ  rë  rõ  râ   rD   Úget_extended_attention_maskÚinvert_attention_maskÚget_head_maskrJ  r…  r†  r   rL  r"   rZ   rO  )rr   rE   rý   rë  ré  rþ   rú  r  r  rL  r  rÿ   r¾  rÀ  rû  r$   rü  rO   rG   rý  rþ  Úextended_attention_maskÚencoder_batch_sizeÚencoder_sequence_lengthrÍ   Úencoder_hidden_shapeÚencoder_extended_attention_maskÚembedding_outputÚencoder_outputsÚsequence_outputrZ  s                                  r(   r‹   zClapTextModel.forward  s  € ðH 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà�;‰;×!Ò!Ø%.Ð%:™	ÀÇÁ×@UÑ@U‰IàˆIàÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà!,Ñˆ
�JØ%.Ð%:�×!Ò!À×@TÑ@Tˆð DSÐC^ °Ñ!3°AÑ!6×!<Ñ!<¸QÒ!?ÐdeÐàÐ!Ü"ŸZ™Z¨*°jÐCYÑ6YÐ)ZÐdjÔkˆNàÐ!Ü�t—‘Ð(8Ô9Ø*.¯/©/×*HÑ*HÊÈKÈZÈKÈÑ*XÐ'Ø3J×3QÑ3QÐR\Ð^hÓ3iÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSYÔ!Z�ð 15×0PÑ0PÐQ_ÐalÓ0mÐð �;‰;×!Ò!Ð&;Ð&GØ=R×=WÑ=WÓ=YÑ:ÐÐ 7¸Ø$6Ð8OÐ#PÐ Ø%Ð-Ü).¯©Ð4HÐQWÔ)XÐ&Ø.2×.HÑ.HÐI_Ó.`Ñ+à.2Ð+ð ×&Ñ& y°$·+±+×2OÑ2OÓPˆ	àŸ?™?ØØ%Ø)Ø'Ø#9ð +ó 
Ðð Ÿ,™,ØØ2ØØ"7Ø#BØ+ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä;Ø-Ø'Ø+×;Ñ;Ø)×7Ñ7Ø&×1Ñ1Ø,×=Ñ=ô
ð 	
r*   )T)NNNNNNNNNNNNN)r[   r\   r]   r^   r   ro  r|   rx  rŒ  r   rA   r  r   r_   r  r   r   r   r‹   rŒ   r�   s   @r(   rƒ  rƒ  Ý  sa  ø„ ñð "€Lõ
ò/ò0ð
 -1Ø15Ø15Ø/3Ø,0Ø04Ø8<Ø9=Ø=AØ$(Ø,0Ø/3Ø&*ñ@
à˜EŸL™LÑ)ð@
ð ! §¡Ñ.ð@
ð ! §¡Ñ.ð	@
ð
 ˜uŸ|™|Ñ,ð@
ð ˜EŸL™LÑ)ð@
ð   §¡Ñ-ð@
ð  (¨¯©Ñ5ð@
ð !)¨¯©Ñ 6ð@
ð " $ u×'8Ñ'8Ñ"9Ñ:ð@
ð ˜D‘>ð@
ð $ D™>ð@
ð ' t™nð@
ð ˜d‘^ð@
ð 
ˆu�U—\‘\Ñ"Ð$PÐPÑ	Q÷@
r*   rƒ  c                   ó¸  ‡ — e Zd ZeZdefˆ fd„Z ee«      	 	 	 	 	 	 ddee	j                     dee	j                     dee	j                     dee   dee   dee   d	e	j                  fd
„«       Z ee«      	 	 	 	 	 	 ddee	j                     dee	j                     dee	j                     dee   dee   dee   d	e	j                  fd„«       Z ee«       eee¬«      	 	 	 	 	 	 	 	 	 ddee	j&                     dee	j                     dee	j(                     dee	j                     dee	j&                     dee   dee   dee   dee   d	eeef   fd„«       «       Zˆ xZS )re  r�   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 )r{   r|   r®   Útext_configr   Ú	TypeErrorÚtypeÚaudio_configr   r	   rá   rA   rW  r  ÚlogÚlogit_scale_init_valuerg  rh  rÞ  rƒ  Ú
text_modelrÜ  Útext_projectionrs  Úaudio_modelÚaudio_projectionrv  )rr   r�   rž  r¡  r~   s       €r(   r|   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*   rE   rý   ré  rÿ   r¾  rÀ  rL   c                 óF  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  ||||||¬«      }|�|d   n|j
                  }| j                  |«      }	t        j                  |	d¬«      }	|	S )a–  
        Returns:
            text_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The text embeddings obtained by
            applying the projection layer to the pooled output of [`ClapTextModel`].

        Examples:

        ```python
        >>> 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")
        >>> text_features = model.get_text_features(**inputs)
        ```©rE   rý   ré  rÿ   r¾  rÀ  r   r/   r=   )	r�   rÿ   r¾  r}  r¤  rÆ  r¥  ÚFÚ	normalize)
rr   rE   rý   ré  rÿ   r¾  rÀ  Útext_outputsrZ  Útext_featuress
             r(   Úget_text_featureszClapModel.get_text_features¨  sµ   € ð6 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—‘ØØ)Ø%Ø/Ø!5Ø#ð 'ó 
ˆð ,7Ð+B˜ QšÈ×HbÑHbˆØ×,Ñ,¨]Ó;ˆÜŸ™ M°rÔ:ˆàÐr*   rË  r½  c                 ó@  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |||¬«      }|s|d   n|j
                  }| j                  |«      }	t        j                  |	d¬«      }	|	S )aÓ  
        Returns:
            audio_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The audio embeddings obtained by
            applying the projection layer to the pooled output of [`ClapAudioModel`].

        Examples:

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

        >>> 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")
        >>> audio_features = model.get_audio_features(**inputs)
        ```)rË  r½  rÀ  r   r/   r=   )	r�   rÿ   r¾  r}  r¦  rÆ  r§  rª  r«  )
rr   rË  r½  rý   rÿ   r¾  rÀ  Úaudio_outputsrZ  Úaudio_featuress
             r(   Úget_audio_featureszClapModel.get_audio_featuresØ  s¬   € ð6 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà×(Ñ(Ø)ØØ#ð )ó 
ˆñ 1<˜ aÒ(À×A\ÑA\ˆà×.Ñ.¨}Ó=ˆÜŸ™ ^¸Ô<ˆàÐr*   ry  Úreturn_lossc
           	      ó”  — |�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	| j	                  |||||	¬«      }
| j                  ||||||	¬«      }|	s|
d   n|
j                  }| j                  |«      }|	s|d   n|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  }|	s||||||
f}|�|f|z   S |S t#        |||||||
¬
«      S )a�  
        Returns:

        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 vaccum cleaner"]

        >>> inputs = processor(text=input_text, audios=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
        ```Nr|  r©  r   r,   r/   T)Úpr>   Úkeepdimg       @)rg   rh   ri   rX   rd   rj   rk   )r�   rÿ   r¾  r}  r¦  r¤  rÆ  r§  r¥  r¾   rh  Úexprg  rA   r  ÚtrU   rf   )rr   rE   rË  r½  rý   ré  r³  rÿ   r¾  rÀ  r°  r¬  rd   rX   Úlogit_scale_textÚlogit_scale_audiori   rh   rg   Úcaption_lossÚ
audio_lossrŠ   s                         r(   r‹   zClapModel.forward  s  € ðL 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà×(Ñ(Ø)ØØ/Ø!5Ø#ð )ó 
ˆð —‘ØØ)Ø%Ø/Ø!5Ø#ð 'ó 
ˆñ 0;�} QÒ'À×@[Ñ@[ˆØ×,Ñ,¨\Ó:ˆá-8�l 1’o¸l×>XÑ>XˆØ×*Ñ*¨;Ó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áØ&¨¸ÀlÐT`ÐboÐpˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØØ-Ø+Ø#Ø%Ø*Ø,ô
ð 	
r*   ©NNNNNN)	NNNNNNNNN)r[   r\   r]   r   ro  r|   r   ÚCLAP_TEXT_INPUTS_DOCSTRINGr   rA   r  r  r_   r®  r€  r²  ÚCLAP_INPUTS_DOCSTRINGr   rf   Ú
LongTensorr�  r   r   r‹   rŒ   r�   s   @r(   re  re  „  s\  ø„ à€Lð˜zõ ñ@ +Ð+EÓFð -1Ø15Ø/3Ø,0Ø/3Ø&*ñ-à˜EŸL™LÑ)ð-ð ! §¡Ñ.ð-ð ˜uŸ|™|Ñ,ð	-ð
 $ D™>ð-ð ' t™nð-ð ˜d‘^ð-ð 
×	Ñ	ò-ó Gð-ñ^ +Ð+FÓGð 26Ø,0Ø15Ø,0Ø/3Ø&*ñ+à  §¡Ñ.ð+ð ˜EŸL™LÑ)ð+ð ! §¡Ñ.ð	+ð
 $ D™>ð+ð ' t™nð+ð ˜d‘^ð+ð 
×	Ñ	ò+ó Hð+ñZ +Ð+@ÓAÙ¨:ÀJÔOð 15Ø6:Ø04Ø15Ø37Ø&*Ø,0Ø/3Ø&*ñ]
à˜E×,Ñ,Ñ-ð]
ð ! ×!2Ñ!2Ñ3ð]
ð ˜E×,Ñ,Ñ-ð	]
ð
 ! §¡Ñ.ð]
ð ˜u×/Ñ/Ñ0ð]
ð ˜d‘^ð]
ð $ D™>ð]
ð ' t™nð]
ð ˜d‘^ð]
ð 
ˆu�jÐ Ñ	!ò]
ó Pó Bô]
r*   re  zf
    CLAP Text Model with a projection layer on top (a linear layer on top of the pooled output).
    c                   ó  ‡ — e Zd ZeZdefˆ fd„Zdej                  fd„Zd„ Z	 e
e«       eee¬«      	 	 	 	 	 	 ddeej                      deej                      d	eej                      d
ee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚClapTextModelWithProjectionr�   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rz   )r{   r|   rƒ  r¤  rÜ  r¥  rv  rö  s     €r(   r|   z$ClapTextModelWithProjection.__init__q  s3   ø€ Ü‰Ñ˜Ô Ü'¨Ó/ˆŒÜ2°6Ó:ˆÔà�‰Õr*   rL   c                 óB   — | j                   j                  j                  S rz   ©r¤  rÿ  rð  rv   s    r(   rx  z0ClapTextModelWithProjection.get_input_embeddingsx  s   € Ø�‰×)Ñ)×9Ñ9Ð9r*   c                 ó:   — || j                   j                  _        y rz   rÅ  r‹  s     r(   rŒ  z0ClapTextModelWithProjection.set_input_embeddings{  s   € Ø5:ˆ�‰×"Ñ"Õ2r*   ry  rE   rý   ré  rÿ   r¾  rÀ  c                 óH  — |�|n| j                   j                  }| j                  ||||||¬«      }|s|d   n|j                  }| j	                  |«      }	|s|	|d   f|dd z   }
t        d„ |
D «       «      S t        |	|j                  |j                  |j                  ¬«      S )a  
        Returns:

        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
        ```Nr©  r   r   r,   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrz   ra   ©rp   rŠ   s     r(   rs   z6ClapTextModelWithProjection.forward.<locals>.<genexpr>ª  ó   è ø€ ÒL F¸Ñ9KœÑLùó   ‚Š)rX   rY   r"   rZ   )
r�   r}  r¤  rÆ  r¥  rt   rW   rY   r"   rZ   )rr   rE   rý   ré  rÿ   r¾  rÀ  r¬  rZ  rX   r  s              r(   r‹   z#ClapTextModelWithProjection.forward~  s½   € ð6 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—‘ØØ)Ø%Ø/Ø!5Ø#ð 'ó 
ˆñ 0;˜ QšÀ×@ZÑ@Zˆà×*Ñ*¨=Ó9ˆáØ" L°¡OÐ4°|ÀAÀBÐ7GÑGˆGÜÑL¨gÔLÓLÐLä"Ø#Ø*×<Ñ<Ø&×4Ñ4Ø#×.Ñ.ô	
ð 	
r*   r½  )r[   r\   r]   r   ro  r|   r	   rž  rx  rŒ  r   r¾  r   rW   r   rA   r  r  r   r   r‹   rŒ   r�   s   @r(   rÂ  rÂ  h  sá   ø„ ð "€Lð˜~õ ð: b§i¡ió :ò;ñ +Ð+EÓFÙÐ+>È^Ô\ð -1Ø15Ø/3Ø,0Ø/3Ø&*ñ1
à˜EŸL™LÑ)ð1
ð ! §¡Ñ.ð1
ð ˜uŸ|™|Ñ,ð	1
ð
 $ D™>ð1
ð ' t™nð1
ð ˜d‘^ð1
ð 
ˆuÐ)Ð)Ñ	*ò1
ó ]ó Gô1
r*   rÂ  zg
    CLAP Audio Model with a projection layer on top (a linear layer on top of the pooled output).
    c                   óø   ‡ — e Zd ZeZdZdefˆ fd„Zdej                  fd„Z	 e
e«       eee¬«      	 	 	 	 	 ddeej                      deej"                     dee   d	ee   d
ee   deeef   fd„«       «       Zˆ xZS )ÚClapAudioModelWithProjectionrË  r�   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rz   )r{   r|   rs  r¦  rÜ  r§  rv  rö  s     €r(   r|   z%ClapAudioModelWithProjection.__init__¾  s4   ø€ Ü‰Ñ˜Ô Ü)¨&Ó1ˆÔÜ 3°FÓ ;ˆÔà�‰Õr*   rL   c                 óV   — | j                   j                  j                  j                  S rz   )r¦  ru  r¤  rº   rv   s    r(   rx  z1ClapAudioModelWithProjection.get_input_embeddingsÅ  s    € Ø×Ñ×-Ñ-×9Ñ9×>Ñ>Ð>r*   ry  r½  rÿ   r¾  rÀ  c                 ó®  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |||||¬«      }|s|d   n|j
                  }| j                  |«      }|s||d   f|dd z   }	t        d„ |	D «       «      S t        ||j                  |j                  |j                  ¬«      S )a¥  
        Returns:

        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(audios=audio_sample, return_tensors="pt")
        >>> outputs = model(**inputs)
        >>> audio_embeds = outputs.audio_embeds
        ```Nr|  r   r   r,   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrz   ra   rÉ  s     r(   rs   z7ClapAudioModelWithProjection.forward.<locals>.<genexpr>ù  rÊ  rË  )rd   rY   rZ   r"   )r�   r}  rÿ   r¾  r¦  rÆ  r§  rt   rc   rY   rZ   r"   )
rr   rË  r½  rÿ   r¾  rÀ  r°  rZ  rd   r  s
             r(   r‹   z$ClapAudioModelWithProjection.forwardÈ  sõ   € ð: &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ1BÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð ×(Ñ(Ø)ØØ/Ø!5Ø#ð )ó 
ˆñ 1<˜ aÒ(À×A\ÑA\ˆà×,Ñ,¨]Ó;ˆáØ# ]°1Ñ%5Ð6¸ÀqÀrÐ9JÑJˆGÜÑL¨gÔLÓLÐLä#Ø%Ø+×=Ñ=Ø$×/Ñ/Ø'×5Ñ5ô	
ð 	
r*   r~  )r[   r\   r]   r   ro  r  r|   r	   rž  rx  r   r€  r   rc   r   rA   r_   r�  r  r   r   r‹   rŒ   r�   s   @r(   rÍ  rÍ  ´  sÏ   ø„ ð #€LØ&€Oð˜õ ð? b§i¡ió ?ñ +Ð+FÓGÙÐ+?ÈoÔ^ð 7;Ø04Ø,0Ø/3Ø&*ñ6
à  ×!2Ñ!2Ñ3ð6
ð ˜E×,Ñ,Ñ-ð6
ð $ D™>ð	6
ð
 ' t™nð6
ð ˜d‘^ð6
ð 
ˆuÐ*Ð*Ñ	+ò6
ó _ó Hô6
r*   rÍ  )re  r\  rƒ  rÂ  rs  rÍ  )r   )Xr^   rÞ   r  Údataclassesr   Útypingr   r   r   r   r   rA   Útorch.nn.functionalr	   rR   rª  Úactivationsr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   Úpytorch_utilsr   r   r   r   Úutilsr   r   r   r   r   r   Úconfiguration_clapr   r   r   Ú
get_loggerr[   rP  Ú_CHECKPOINT_FOR_DOCr)   r9   r;   rJ   r  rU   rW   rc   rf   rž  rx   r�   r«   rÑ   r  r   r3  r?  rD  r~  r’  r   ÚCLAP_START_DOCSTRINGr¾  r€  r¿  rÜ  rå  r  r  r*  r'  r/  r4  r8  rH  rU  r\  rs  rƒ  re  rÂ  rÍ  Ú__all__ra   r*   r(   ú<module>rß     sP  ðñ ã Û Ý !ß 4Õ 4ã ß Ð Ý å !÷ñ õ
 .ß vÓ v÷÷ ÷ LÑ Kð 
ˆ×	Ñ	˜HÓ	%€à.Ð òò"ò*ó(4ð$7˜UŸ\™\ð 7¨e¯l©ló 7ð
 ô?˜+ó ?ó ð?ð8 ô?˜;ó ?ó ð?ð8 ô!
�ó !
ó ð!
ôJ�2—9‘9ô ô2%˜Ÿ	™	ô %ôP_˜"Ÿ)™)ô _ôFa˜RŸY™Yô aôJ
˜"Ÿ)™)ô 
ô#˜Ÿ™ô #ôN˜BŸI™Iô ô 	�b—i‘iô 	ôz�R—Y‘Yô zô|9�R—Y‘Yô 9ôz3˜BŸI™Iô 3ôlG
�r—y‘yô G
ðTÐ ðÐ ð@Ð ð$#Ð ôL˜"Ÿ)™)ô ô&V=˜Ÿ™ô V=ôtC˜BŸI™Iô CôN˜Ÿ™ô ð Ð"ð$Ð  ô0˜Ÿ	™	ô 0ôh˜2Ÿ9™9ô ô �R—Y‘Yô ôS�B—I‘Iô SônZ
�b—i‘iô Z
ô|�R—Y‘Yô ô)˜/ô )ôB7
Ð(ô 7
ôtd
Ð'ô d
ñN Ð*Ó+ô`
Ð#ó `
ó ,ð`
ñF ðð ó	ôC
Ð"5ó C
óðC
ñL ðð ó	ôF
Ð#6ó F
óðF
òR�r*   