Ë
    ÜÓ^jå"  ã                   óÒ   — d dl 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  e«       rd dlZ ej"                  e«      Z G d„ d	ed
¬«      Ze G d„ de«      «       ZdgZy)é    Né   )Ú
AudioInput)ÚBatchFeature)ÚProcessingKwargsÚProcessorMixinÚUnpack)Ú	TextInput)Úauto_docstringÚis_torch_availableÚloggingc                   ó*   — e Zd Zddiddddœdddœd	œZy
)ÚMusicFlamingoProcessorKwargsÚpaddingTi€>  Ú
max_length)Úsampling_rateÚreturn_attention_maskr   ÚptÚleft)Úreturn_tensorsÚpadding_side)Útext_kwargsÚaudio_kwargsÚcommon_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    ú…/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/musicflamingo/processing_musicflamingo.pyr   r   &   s2   „ ð �tð
ð #Ø%)Ø#ñ
ð #Ø"ñ
ñ�Ir   r   F)Útotalc                   ó:  ‡ — e Zd ZeZ	 	 	 	 	 dˆ fd„	Ze	 	 ddeee   z  de	dz  de
dz  dee   def
ˆ fd„«       Z	 	 dde	dz  deee   z  dz  dee   fˆ fd	„Zd
„ Zde	fd„Zdededefd„Zedee   fˆ fd„«       Zedee   fd„«       Zed„ «       Zed„ «       Zˆ xZS )ÚMusicFlamingoProcessorNc                 óæ   •— || _         |j                  |«      | _        || _        t        ‰| �  |||¬«       || _        || _        |j                  |«      | _        |j                  |«      | _	        y)as  
        audio_token (`Optional[str]`, *optional*, defaults to `"<sound>"`):
            Special token used to represent audio inputs in the chat template.
        audio_bos_token (`Optional[str]`, *optional*, defaults to `"<|sound_bos|>"`):
            Special token used to represent the beginning of audio.
        audio_eos_token (`Optional[str]`, *optional*, defaults to `"<|sound_eos|>"`):
            Special token used to represent the end of audio.
        max_audio_len (`int`, *optional*, defaults to 1200):
            Maximum length of audio sequences in seconds. Audio longer than this will be truncated.
        )Úchat_templateN)
Úaudio_tokenÚconvert_tokens_to_idsÚaudio_token_idÚmax_audio_lenÚsuperÚ__init__Úaudio_bos_tokenÚaudio_eos_tokenÚaudio_bos_token_idÚaudio_eos_token_id)	ÚselfÚfeature_extractorÚ	tokenizerr%   r&   r,   r-   r)   Ú	__class__s	           €r    r+   zMusicFlamingoProcessor.__init__;   ss   ø€ ð( 'ˆÔØ'×=Ñ=¸kÓJˆÔØ*ˆÔÜ‰ÑÐ*¨IÀ]ÐÔSØ.ˆÔØ.ˆÔØ"+×"AÑ"AÀ/Ó"RˆÔØ"+×"AÑ"AÀ/Ó"RˆÕr   ÚtextÚaudioÚoutput_labelsÚkwargsÚreturnc                 óJ  •— d|v r*|d   dk7  r"t        | j                  j                  › d�«      ‚|rd|d<   t        ‰| �  d||dœ|¤Ž}|rM|j                  d«      }|d   j                  «       }d	||d
k7  <   d	||| j                  j                  k(  <   ||d<   t        |d¬«      S )a0  
        output_labels (bool, *optional*, default=False):
            Whether to return labels for training.

        Returns:
            [`BatchFeature`]: A dictionary with tokenized text (`input_ids`, `attention_mask`) and
            audio features (`input_features`, `input_features_mask`).
        r   r   z% only supports `return_tensors='pt'`.TÚreturn_mm_token_type_ids©r5   r4   Úmm_token_type_idsÚ	input_idsiœÿÿÿr   Úlabels)ÚdataÚtensor_typer   )
Ú
ValueErrorr3   r   r*   Ú__call__ÚpopÚcloner2   Úpad_token_idr   )	r0   r4   r5   r6   r7   Úmodel_inputsr<   r>   r3   s	           €r    rB   zMusicFlamingoProcessor.__call__X   sÇ   ø€ ð" ˜vÑ%¨&Ð1AÑ*BÀdÒ*JÜ §¡× 7Ñ 7Ð8Ð8]Ð^Ó_Ð_áØ15ˆFÐ-Ñ.Ü‘wÑ'ÐI¨e¸$ÑIÀ&ÑIˆáØ ,× 0Ñ 0Ð1DÓ EÐØ! +Ñ.×4Ñ4Ó6ˆFØ-1ˆFÐ$¨Ñ)Ñ*Ø<@ˆF�6˜TŸ^™^×8Ñ8Ñ8Ñ9Ø%+ˆL˜Ñ"Ü ¸4Ô@Ð@r   c                 ó¬   •— t        ‰| �  d||dœ|¤Ž |�?|�<t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚y y y )Nr;   zGot z
 text but z audios; they must match 1:1.r   )r*   Úvalidate_inputsÚlenrA   )r0   r5   r4   r7   r3   s       €r    rH   z&MusicFlamingoProcessor.validate_inputsx   se   ø€ ô 	‰ÑÐA e°$ÑA¸&ÒAàÐ Ð 1´c¸$³iÄ3ÀuÃ:Ò6MÜ˜t¤C¨£I ;¨j¼¸U»¸ÐDaÐbÓcÐcð 7NÐ 1Ðr   c                 ó2   — |dz
  dz  dz   }|dz
  dz  dz   }|S )Né   é   r   )r0   Úaudio_lengthsÚconv_output_lengthsÚaudio_tokens_lengthss       r    Ú_get_audio_token_lengthz.MusicFlamingoProcessor._get_audio_token_lengthƒ   s2   € Ø,¨qÑ0°QÑ6¸Ñ:ÐØ 3°aÑ 7¸AÑ=ÀÑAÐØ#Ð#r   c           
      ó6  — t        |d   | j                  j                  z  «      }t        | j                  | j                  j                  z  «      }g }g }|D ]Ë  }t        |j                  d   «      }t        d||z   dz
  |z  «      }	|	|kD  r<t        j                  d||d   z  d›d| j                  › d| j                  › d�«       |}	|j                  |	«       t        ||	|z  «      }
t        |	«      D ]-  }||z  }t        |dz   |z  |
«      }|j                  ||| «       Œ/ ŒÍ | j                  j                  |«      } | j                  |fi |¤Ž}|j                  d	«      |d
<   t        j                  t        j                  |d
   j!                  d«      |«      D �cg c]  }|j!                  «       ‘Œ c}«      }| j#                  |«      |d<   g }t        t%        |«      «      D ]&  }| j'                  ||¬«      }|j                  |«       Œ( ||fS c c}w )Nr   r   rK   zAudio duration (z.1fzs) exceeds zs; truncating to first zs.Úattention_maskÚinput_features_maskéÿÿÿÿÚnum_audio_tokens)Ú	audio_idx)Úintr1   Úchunk_lengthr)   ÚshapeÚmaxÚloggerÚwarningÚappendÚminÚrangeÚfetch_audiorC   ÚtorchÚstackÚsplitÚsumrP   rI   Úreplace_audio_token)r0   r5   r7   Úwindow_sizeÚmax_windowsÚper_sample_windowsÚflat_chunksÚaudio_elÚ	n_samplesÚn_winÚtime_capÚiÚstartÚendÚaudio_inputsÚsrM   Úaudio_replacementsÚidxÚreplacement_texts                       r    Ú_process_audioz%MusicFlamingoProcessor._process_audioˆ   sU  € ä˜& Ñ1°D×4JÑ4J×4WÑ4WÑWÓXˆÜ˜$×,Ñ,°×0FÑ0F×0SÑ0SÑSÓTˆà(*ÐØ(*ˆØò 	8ˆHÜ˜HŸN™N¨1Ñ-Ó.ˆIÜ˜˜I¨Ñ3°aÑ7¸KÑGÓHˆEØ�{Ò"Ü—‘Ø& y°6¸/Ñ3JÑ'JÈ3Ð&OÈ{Ð[_×[mÑ[mÐZnð  oFð  GK÷  GYñ  GYð  FZð  Z\ð  ]ôð $�Ø×%Ñ% eÔ,ä˜9 e¨kÑ&9Ó:ˆHÜ˜5“\ò 8�Ø˜K™�Ü˜1˜q™5 KÑ/°Ó:�Ø×"Ñ" 8¨E°#Ð#6Õ7ñ8ð	8ð  ×&Ñ&×2Ñ2°5Ó9ˆØ-�t×-Ñ-¨kÑD¸VÑDˆØ.:×.>Ñ.>Ð?OÓ.PˆÐ*Ñ+ô
 Ÿ™Ü#Ÿk™k¨,Ð7LÑ*M×*QÑ*QÐRTÓ*UÐWiÓjÖk˜ˆQ�U‰U�WÒkó
ˆð ,0×+GÑ+GÈÓ+VˆÐ'Ñ(àÐÜœ˜U›Ó$ò 	8ˆCØ#×7Ñ7¸ÐPSÐ7ÓTÐØ×%Ñ%Ð&6Õ7ð	8ð Ð/Ð/Ð/ùò ls   Æ!Hrq   rV   c                 ód   — |d   |   }| j                   | j                  |z  z   | j                  z   S )NrU   )r,   r&   r-   )r0   rq   rV   rU   s       r    re   z*MusicFlamingoProcessor.replace_audio_token²   s;   € Ø'Ð(:Ñ;¸IÑFÐØ×#Ñ# d×&6Ñ&6Ð9IÑ&IÑIÈD×L`ÑL`Ñ`Ð`r   c                 ó    •— t         ‰| �  dgz   S )NrS   )r*   Úmodel_input_names)r0   r3   s    €r    ry   z(MusicFlamingoProcessor.model_input_names¶   s   ø€ ä‰wÑ(Ð,AÐ+BÑBÐBr   c                 ó   — dgS )zNInput names returned always by subprocessors but not used in model's `forward`rU   r   ©r0   s    r    Úunused_input_namesz)MusicFlamingoProcessor.unused_input_namesº   s   € ð #Ð#Ð#r   c                 óH   — | j                   | j                  | j                  gS )N)r(   r.   r/   r{   s    r    Úaudio_token_idsz&MusicFlamingoProcessor.audio_token_ids¿   s!   € à×#Ñ# T×%<Ñ%<¸d×>UÑ>UÐVÐVr   c                 óD   — t         j                  d«       | j                  S )zLDeprecated alias for `audio_token_ids`; will be removed in a future release.z@`audio_ids` is deprecated; please use `audio_token_ids` instead.)r[   Úwarning_oncer~   r{   s    r    Ú	audio_idsz MusicFlamingoProcessor.audio_idsÄ   s   € ô 	×ÑÐ^Ô_Ø×#Ñ#Ð#r   )Nz<sound>z<|sound_bos|>z<|sound_eos|>i°  )NF)NN)r   r   r   r   Úvalid_processor_kwargsr+   r
   r	   Úlistr   Úboolr   r   rB   r   rH   rP   rv   ÚdictrW   Ústrre   Úpropertyry   r|   r~   r�   Ú__classcell__)r3   s   @r    r#   r#   7   sm  ø„ à9Ðð ØØ'Ø'ØõSð: ð $(Ø%*ñ	Aà˜$˜y™/Ñ)ðAð ˜DÑ ðAð ˜d‘{ð	Að
 Ð5Ñ6ðAð 
ôAó ðAðB $(Ø37ñ	dà˜DÑ ð	dð ˜$˜y™/Ñ)¨DÑ0ð	dð Ð)Ñ*õ		dò$ð
(0 Jó (0ðTa°ð aÀð aÈó að ðC 4¨¡9ô Có ðCð ð$ D¨¡Iò $ó ð$ð ñWó ðWð ñ$ó ô$r   r#   )ÚnumpyÚnpÚaudio_utilsr   Úfeature_extraction_utilsr   Úprocessing_utilsr   r   r   Útokenization_utils_baser	   Úutilsr
   r   r   ra   Ú
get_loggerr   r[   r   r#   Ú__all__r   r   r    ú<module>r’      sv   ðó, å %Ý 4ß HÑ HÝ 0ß @Ñ @ñ ÔÛð 
ˆ×	Ñ	˜HÓ	%€ôÐ#3¸5õ ð" ôP$˜^ó P$ó ðP$ðf $Ð
$�r   