ó
    qyüiÅ;  ã                   ó.  • S r SSKrSSKJr  SSKJrJr  SSKrSSK	J
r
  SSKJrJrJr  SSKJrJrJrJr  SS	KJrJrJr  SS
KJrJr  \(       a  SSKJr  \R8                  " \5      rS\4S jr S r!S r"S r#S r$ " S S\SS9r%\ " S S\5      5       r&S/r'g)z
Processor class for Idefics3.
é    N)Ú
accumulate)ÚTYPE_CHECKINGÚUnioné   )ÚBatchFeature)Ú
ImageInputÚis_valid_imageÚ
load_image)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)Ú
AddedTokenÚBatchEncodingÚ	TextInput)Úauto_docstringÚlogging)ÚPreTokenizedInputÚreturnc                 óR   • [        U [        5      =(       a    U R                  S5      $ )NÚhttp)Ú
isinstanceÚstrÚ
startswith)Úvals    Úm/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/idefics3/processing_idefics3.pyÚis_urlr   %   s   € Ü�cœ3Ó×: C§N¡N°6Ó$:Ð:ó    c                 ó<   • [        U 5      =(       d    [        U 5      $ ©N)r   r	   )Úelems    r   Úis_image_or_image_urlr"   )   s   € Ü�$‹<×/œ>¨$Ó/Ð/r   c           	      óÄ   • Sn[        U5       H7  n[        U5       H   nUU SUS-    SUS-    S3-   U U -  -   -  nM"     US-  nM9     USU 3U -   U U -  -   U -   -  nU$ )zKPrompt with expanded image tokens for when the image is split into patches.Ú ú<row_é   Ú_col_Ú>Ú
)Úrange)	Úimage_seq_lenÚ
image_rowsÚ
image_colsÚfake_token_around_imageÚimage_tokenÚglobal_img_tokenÚtext_split_imagesÚn_hÚn_ws	            r   Ú_prompt_split_imager4   -   s·   € àÐÜ�ZÖ ˆÜ˜Ö$ˆCØØ*Ð+°°s¸Q±w°i¸uÀSÈ1ÁWÀIÈQÐ/OÑOÐU`ÐTaÐerÑRrÑrñÒñ %ð 	˜TÑ!Òñ !ð Ø
Ð$Ð%Ð&ØÐñ	 àˆM˜]Ñ
*ñ	+ð %Ð%ñ	'ñÐð Ðr   c                 ó&   • U U -   U U -  -   U -   $ )z5Prompt with expanded image tokens for a single image.© )r+   r.   r/   r0   s       r   Ú_prompt_single_imager7   @   s6   € ð #Ð
#ØÐñ	 àˆM˜]Ñ
*ñ	+ð %Ð%ñ	'ðr   c                 óL   • U S:X  a  US:X  a  [        UUUUS9$ [        X XXE5      $ )Nr   )r.   r/   r0   )r7   r4   )r,   r-   r+   r.   r/   r0   s         r   Úget_image_prompt_stringr9   J   s@   € ð �Qƒ˜:¨›?Ü#ØØ$;Ø#Ø-ñ	
ð 	
ô Ø :Èóð r   c                   ó,   • \ rS rSrSSSSS.SS0S.rSrg)	ÚIdefics3ProcessorKwargséY   TF)Úadd_special_tokensÚpaddingÚis_split_into_wordsÚreturn_mm_token_type_idsÚreturn_row_col_info)Útext_kwargsÚimages_kwargsr6   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	_defaultsÚ__static_attributes__r6   r   r   r;   r;   Y   s(   † ð #'ØØ#(Ø(-ñ	
ð " 4ð
ñ
ƒIr   r;   F)Útotalc                   óî   ^ • \ rS rSr SS\S\S-  4U 4S jjjrS r\   SS\	\
\	   -  \
\
\	      -  S\\S	\
\   \
S	   4   S\S-  S
\\   S\4
S jj5       rS\
S\
\   S\
\
\      4S jrSS jrSrU =r$ )ÚIdefics3Processorég   Nr+   Úchat_templatec                 ó2  >• [        SSSS9R                  U l        [        SSSS9R                  U l        [        SSSS9R                  U l        SU l        X0l        UR                  U R                  5      U l        UR                  U R                  5      U l	        UR                  U R
                  5      U l
        [        S5       VVs/ s H3  n[        S5        H   orR                  S	US
-    SUS
-    S35      PM"     M5     snnU l        [        R                  " S5      U l        SU R                  U R                  U R                  /0nUR!                  U5        UR                  U R                  5      U l        ["        T	U ]H  " X4SU0UD6  gs  snnf )aw  
image_seq_len (`int`, *optional*, defaults to 169):
    The length of the image sequence i.e. the number of <image> tokens per image in the input.
    This parameter is used to build the string from the input prompt and image tokens and should match the
    value the model used. It is computed as: image_seq_len = int(((image_size // patch_size) ** 2) / (scale_factor**2))
z<fake_token_around_image>FT)Ú
normalizedÚspecialz<image>z<end_of_utterance>z<global-img>é   r%   r&   r'   r(   z*(\n?<global-img>\n?|<row_\d+_col_\d+>\n?)+Úadditional_special_tokensrN   N)r   ÚcontentÚfake_image_tokenr/   Úend_of_utterance_tokenÚglobal_image_tagr+   Úconvert_tokens_to_idsÚimage_token_idÚfake_image_token_idÚglobal_image_token_idr*   Úrow_col_idsÚreÚcompileÚ%_regex_to_remove_extra_special_tokensr=   ÚsuperÚ__init__)
ÚselfÚimage_processorÚ	tokenizerr+   rN   ÚkwargsÚiÚjÚtokens_to_addÚ	__class__s
            €r   ra   ÚIdefics3Processor.__init__i   s„  ø€ ô !+Ð+FÐSXÐbfÑ g× oÑ oˆÔÜ% i¸EÈ4ÑP×XÑXˆÔÜ&0Ð1EÐRWÐaeÑ&f×&nÑ&nˆÔ#Ø .ˆÔØ*ÔØ'×=Ñ=¸d×>NÑ>NÓOˆÔØ#,×#BÑ#BÀ4×CXÑCXÓ#YˆÔ Ø%.×%DÑ%DÀT×EZÑEZÓ%[ˆÔ"äSXÐYZÔS[ô
ÚS[ÈaÔejÐkl×emÐ`a×+Ñ+¨e°A¸±E°7¸%ÀÀAÁ¸wÀaÐ,HÖIÑemÑIÑS[ò
ˆÔô 68·Z²ZÐ@mÓ5nˆÔ2ð (Ø×%Ñ%Ø× Ñ Ø×+Ñ+ð*ð
ˆð 	×$Ñ$ ]Ô3Ø'×=Ñ=¸d×>NÑ>NÓOˆÔä‰Ò˜Ñ[À=Ð[ÐTZÓ[ùó%
s   Ã:Fc                 óò   • / nU Hn  n/ nU HR  n[        U5      (       a  UR                  U5        M&  [        U5      (       d  M8  UR                  [        U5      5        MT     UR                  U5        Mp     U$ r    )r	   Úappendr   r
   )rb   ÚpromptsÚprompt_imagesÚpromptÚimagesr!   s         r   Ú_extract_images_from_promptsÚ.Idefics3Processor._extract_images_from_promptsŽ   si   € ØˆÛˆFØˆFÛ�Ü! $×'Ñ'Ø—M‘M $Ö'Ü˜D—\“\Ø—M‘M¤*¨TÓ"2Ö3ñ	 ð
 × Ñ  Ö(ñ ð Ðr   rp   Útextr   re   r   c                 óv
  • Uc  Uc  [        S5      eU R                  " [        4SU R                  R                  0UD6nUb  UOU R
                  nUS   R                  SS5      nUS   R                  SS5      n/ n/ n	0 n
Ub{  [        U[        5      (       a  U/nO8[        U[        5      (       d#  [        US   [        5      (       d  [        S	5      eU Vs/ s H  o»R                  U R                  5      PM     nnUGb�  [        U5      (       a  U//nGO,[        U[        [        45      (       a·  [        US   5      (       a¤  Ub�  [        U5      [        U5      :w  a>  [        S
U R                   S[        U5       SU R                   S[        U5       S3	5      eS/[        [!        U5      5      -   n[#        [        U5      5       Vs/ s H  nXU   XÍS-       PM     nnO^U/nOZ[        U[        [        45      (       d?  [        US   [        [        45      (       d!  [        US   S   5      (       d  [        S5      eU Vs/ s H  n[        U5      PM     n	nU VVs/ s H0  o» Vs/ s H   n[%        U5      (       a  ['        U5      OUPM"     snPM2     nnnU R(                  " U40 US   D6nU
R+                  U5        UGbÅ  X˜:w  a  [        SU SU	 S35      eU
R                  SU Vs/ s H	  nS/U-  PM     sn5      nU
R                  SU Vs/ s H	  nS/U-  PM     sn5      nU R,                  nU R                  nU R.                  n/ n/ n[1        UUU5       Hî  u  nnn/ n/ n[1        UU5       H^  u  nn[3        UUUUUUS9nU R
                  S-   U-  S-   nUR5                  U R
                  S-   UU-  -   5        UR5                  U5        M`     UR5                  U5        UR7                  U5      n [        U 5      S:X  a  [        S5      eU S   n[9        U5       H  u  nnUUU US-      -   -  nM     UR5                  U5        Mð     U R                  " U40 US   D6n!U R;                  UU!S/S9  U
R+                  U!5        O`Ub]  [=        U5      (       a%  [        S[        U5       SU R                   S35      eU R                  " S#SU0US   D6n!U
R+                  U!5        U(       a  U R?                  U
S    W5      U
S!'   [A        X§S"9$ s  snf s  snf s  snf s  snf s  snnf s  snf s  snf )$zì
image_seq_len (`int`, *optional*):
    The length of the image sequence. If not provided, the default value of self.image_seq_len is used.
    image_seq_len should be equal to int(((image_size // patch_size) ** 2) / (scale_factor**2))
Nz+You must provide either `text` or `images`.Útokenizer_init_kwargsrB   r@   FÚreturn_tensorsr   zAInvalid input text. Please provide a string, or a list of stringszThe total number of zP tokens in the prompts should be the same as the number of images passed. Found Ú z tokens and z images.r&   zdInvalid input images. Please provide a single image or a list of images or a list of list of images.rC   z!The number of images in the text z and images z should be the same.ÚrowsÚcols)r/   r.   r0   é   r   z.The image token should be present in the text.Úimage)Ú
modalitieszFound z. tokens in the text but no images were passed.rs   Ú	input_idsÚmm_token_type_ids)ÚdataÚtensor_typer6   )!Ú
ValueErrorÚ_merge_kwargsr;   rd   Úinit_kwargsr+   Úpopr   r   ÚlistÚcountr/   r"   ÚtupleÚsumÚlenr   r*   r   r
   rc   ÚupdaterU   rW   Úzipr9   rl   ÚsplitÚ	enumerateÚ_check_special_mm_tokensÚanyÚcreate_mm_token_type_idsr   )"rb   rp   rs   r+   re   Úoutput_kwargsr@   rv   Ún_images_in_textÚn_images_in_imagesÚinputsÚsampleÚcumsum_images_in_textrf   ÚimÚimage_inputsÚn_imagesr,   r-   rU   r/   r0   Úprompt_stringsÚbatch_image_seq_lengthsÚsample_rowsÚsample_colsÚimage_prompt_stringsÚimage_seq_lengthsÚn_rowsÚn_colsÚimage_prompt_stringÚ
row_lengthÚsplit_sampleÚtext_inputss"                                     r   Ú__call__ÚIdefics3Processor.__call__š   s®  € ð ‰<˜F™NÜÐJÓKÐKà×*Ò*Ü#ñ
à"&§.¡.×"<Ñ"<ð
ð ñ
ˆð *7Ñ)B™È×HZÑHZˆØ#0°Ñ#?×#CÑ#CÐD^Ð`eÓ#fÐ Ø& }Ñ5×9Ñ9Ð:JÈDÓQˆàÐØÐØˆàÑÜ˜$¤×$Ñ$Ø�v‘Ü ¤d×+Ñ+´J¸tÀA¹wÌ×4LÑ4LÜ Ð!dÓeÐeÙMQÓRÊTÀ6§¡¨T×-=Ñ-=Ö >ÉTÐÐRàÒÜ$ V×,Ñ,Ø!˜(˜’Ü˜F¤T¬5 M×2Ñ2Ô7LÈVÐTUÉY×7WÑ7WØÑ#ÜÐ+Ó,´°F³Ó;Ü(Ø2°4×3CÑ3CÐ2Dð E&Ü&)Ð*:Ó&;Ð%<¸A¸d×>NÑ>NÐ=OÈ|Ô\_Ð`fÓ\gÐ[hÐhpðróð ð
 ./¨C´$´zÐBRÓ7SÓ2TÑ,TÐ)ô "'¤sÐ+;Ó'<Ô!=óâ!=˜Að °QÑ7Ð:OÐTUÑPUÑ:VÓWÙ!=ð ð �Fð
 %˜X‘Fä˜v¬¬e }×5Ñ5Ü" 6¨!¡9¬t´U¨m×<Ñ<Ü-¨f°Q©i¸©l×;Ñ;ä Øzóð ñ =CÓ!CºF°&¤# f¦+¹FÐÐ!Cñ ]cÔcÒ\bÐRXÀfÓMÂfÀ¬°¯©”z "”~¸Ò;ÁfÔMÑ\bˆFÑcà×/Ò/°ÑY¸-ÈÑ:XÑYˆLØ�M‰M˜,Ô'àÒØ%Ó9Ü$Ø;Ð<LÐ;MÈ\ÐZlÐYmð  nBð  Cóð ð $ŸZ™Z¨ÑP`Ó0aÒP`ÀH°!°°x´ÑP`Ñ0aÓb�
Ø#ŸZ™Z¨ÑP`Ó0aÒP`ÀH°!°°x´ÑP`Ñ0aÓb�
à#'×#8Ñ#8Ð Ø"×.Ñ.�Ø#'×#8Ñ#8Ð à!#�Ø*,Ð'Ü8;¸DÀ*ÈjÖ8YÑ4�F˜K¨à+-Ð(Ø(*Ð%Ü*-¨k¸;Ö*G™˜ Ü.EØ"Ø"Ø)Ø(3Ø4DØ-=ñ/Ð+ð '+×&8Ñ&8¸1Ñ&<ÀÑ%FÈÑ%J˜
Ø)×0Ñ0°$×2DÑ2DÀqÑ2HÈJÐY_ÑL_Ñ1_Ô`Ø,×3Ñ3Ð4GÖHñ +Hð ,×2Ñ2Ð3DÔEØ#)§<¡<°Ó#<�LÜ˜<Ó(¨AÓ-Ü(Ð)YÓZÐZð *¨!™_�FÜ2;Ð<PÖ2QÑ.˜Ð.ØÐ"5¸ÀQÈÁUÑ8KÑ"KÑKšñ 3Rà"×)Ñ)¨&Ö1ñ7 9Zð: #Ÿnšn¨^Ñ\¸}È]Ñ?[Ñ\�Ø×-Ñ-¨n¸kÐW^ÐV_Ð-Ñ`Ø—‘˜kÔ*øàÑÜÐ#×$Ñ$Ü ØœSÐ!1Ó2Ð3°1°T×5EÑ5EÐ4FÐFtÐuóð ð Ÿ.š.ÑS¨dÐS°mÀMÑ6RÑSˆKØ�M‰M˜+Ô&æ#Ø*.×*GÑ*GÈÈ{ÑH[Ð]tÓ*uˆFÐ&Ñ'Ü ÑDÐDùò}  Sùòùò "Dùò NùÓcùò 1bùÚ0as6   Ã$TÇTÉT!É$	T+É-'T&ÊT+Ë0T1
ÌT6
Ô&T+r}   r›   c                 ó’  • / n[        U5       Hµ  u  pE[        R                  " X   5      n[        R                  " U5      n[        R                  " X`R
                  :H  5      S   nSn	U H6  n
U	[        U5      :¼  a    O&X‰   nXº-   nSX{U& [        R                  " XŒ5      n	M8     UR                  UR                  5       5        M·     U$ )Nr   r&   )
r�   ÚnpÚarrayÚ
zeros_likeÚwhererZ   r‰   Úsearchsortedrl   Útolist)rb   r}   r›   r~   rf   Úseq_lengthsÚ	array_idsÚmm_token_typesÚimage_start_positionsrg   Úseq_lenÚstartÚends                r   r�   Ú*Idefics3Processor.create_mm_token_type_ids  sÂ   € ð ÐÜ'Ð(?Ö@‰NˆAÜŸš ¡Ó.ˆIÜŸ]š]¨9Ó5ˆNÜ$&§H¢H¨Y×:RÑ:RÑ-RÓ$SÐTUÑ$VÐ!ØˆAÛ&�ØœÐ1Ó2Ó2ÙØ-Ñ0�Ø‘o�Ø,-� SÐ)Ü—O’OÐ$9Ó?’ñ 'ð ×$Ñ$ ^×%:Ñ%:Ó%<Ö=ñ Að !Ð r   c                 óÈ  • 0 nUbÎ  [         R                  R                  S0 5      nUR                  U5        U Vs/ s H!  nU R                  R
                  " / UQUP76 PM#     nnU R                  S-   nU R                  S-   n/ n	/ n
U H4  u  p¼nX�-  S-   nU	R                  X~U-  -   5        U
R                  U5        M6     UR                  XšS.5        [        S0 UD6$ s  snf )a{  
Computes the number of placeholder tokens needed for multimodal inputs with the given sizes.

Args:
    image_sizes (`list[list[int]]`, *optional*):
        The input sizes formatted as (height, width) per each image.

Returns:
    `MultiModalData`: A `MultiModalData` object holding number of tokens per each of the provided
    input modalities, along with other useful data.
rC   r   rz   r&   )Únum_image_tokensÚnum_image_patchesr6   )	r;   rH   ÚgetrŠ   rc   Úget_number_of_image_patchesr+   rl   r   )rb   Úimage_sizesre   Úvision_datarC   Ú
image_sizeÚnum_image_row_colsÚbase_image_lengthÚ
col_lengthr¸   r¹   Únum_patchesÚnum_rowsÚnum_colsr£   s                  r   Ú_get_num_multimodal_tokensÚ,Idefics3Processor._get_num_multimodal_tokens2  s	  € ð ˆØÑ"Ü3×=Ñ=×AÑAÀ/ÐSUÓVˆMØ× Ñ  Ô(ñ #.ó"â"-�Jð ×$Ñ$×@Ò@Ð\À*Ð\ÈmÕ\Ù"-ð ð "ð
 !%× 2Ñ 2°QÑ 6ÐØ×+Ñ+¨aÑ/ˆJØ!ÐØ "Ðã3EÑ/� xØ'Ñ2°QÑ6�
Ø ×'Ñ'Ð(9È(Ñ=RÑ(SÔTØ!×(Ñ(¨Ö5ñ 4Fð
 ×ÑÐ4DÑmÔnäÑ, Ñ,Ð,ùò#"s   »(C)
r_   rV   rU   rZ   rW   r[   r+   r/   rY   r\   )Né©   N)NNNr    )rD   rE   rF   rG   Úintr   ra   rq   r   r   r…   r   r   r   r;   r   r¦   r�   rÅ   rI   Ú__classcell__)ri   s   @r   rL   rL   g   s  ø† ð fjñ#\Ø>Að#\ØX[Ð^bÑXb÷#\ð #\òJ
ð ð JNØbfØ$(ñ	@Eà˜T *Ñ-Ñ-°°T¸*Ñ5EÑ0FÑFð@Eð �IÐ2°D¸±OÀTÐJ]ÑE^Ð^Ñ_ð@Eð ˜T‘zð	@Eð
 Ð0Ñ1ð@Eð 
ô@Eó ð@EðD!°$ð !ÐQUÐVYÑQZð !Ð_cÐdhÐilÑdmÑ_nô !÷*#-ò #-r   rL   )(Ú__doc__r]   Ú	itertoolsr   Útypingr   r   Únumpyr©   Úfeature_extraction_utilsr   Úimage_utilsr   r	   r
   Úprocessing_utilsr   r   r   r   Útokenization_utils_baser   r   r   Úutilsr   r   r   Ú
get_loggerrD   ÚloggerÚboolr   r"   r4   r7   r9   r;   rL   Ú__all__r6   r   r   Ú<module>r×      s    ðñó 
Ý  ß 'ã å 4ß AÑ Aß XÓ Xß KÑ Kß ,ö Ý<à	×	Ò	˜HÓ	%€ð;�4ô ;ò0òò&òôÐ.°eò ð ôm-˜ó m-ó ðm-ð` Ð
�r   