ó
    ˆŽ¡jQ8  ã                   ó  • 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  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  \R6                  " \5      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)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)Ú
AddedTokenÚBatchEncodingÚ	TextInput)Úauto_docstringÚlogging)ÚPreTokenizedInputc                   ó,   • \ rS rSrSSSSS.SS0S.rSrg)	ÚIdefics3ProcessorKwargsé%   TF)Úadd_special_tokensÚpaddingÚis_split_into_wordsÚreturn_mm_token_type_idsÚreturn_row_col_info)Útext_kwargsÚimages_kwargs© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	_defaultsÚ__static_attributes__r   ó    Ú¾C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/idefics3/processing_idefics3.pyr   r   %   s(   † ð #'ØØ#(Ø(-ñ	
ð " 4ð
ñ
ƒIr%   r   F)Útotalc                   ó�  ^ • \ rS rSr\r SS\S\S-  4U 4S jjjr\	   SS\
\\
   -  \\\
      -  S\\S\\   \S   4   S\S-  S	\\   S
\4
S jj5       r  SS\
S-  S\\S\\   \S   4   S	\\   4S jjr  SS\
S-  S\\S\\   \S   4   S	\\   4U 4S jjjrS\S\S
\4S jrS\S\\   S
\\\      4S jrSS jrSrU =r$ )ÚIdefics3Processoré3   NÚimage_seq_lenÚ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>é   ú<row_é   Ú_col_Ú>z*(\n?<global-img>\n?|<row_\d+_col_\d+>\n?)+Úadditional_special_tokensr,   N)r   ÚcontentÚfake_image_tokenÚimage_tokenÚend_of_utterance_tokenÚglobal_image_tagr+   Úconvert_tokens_to_idsÚimage_token_idÚfake_image_token_idÚglobal_image_token_idÚrangeÚrow_col_idsÚreÚcompileÚ%_regex_to_remove_extra_special_tokensr   ÚsuperÚ__init__)
ÚselfÚimage_processorÚ	tokenizerr+   r,   ÚkwargsÚiÚjÚtokens_to_addÚ	__class__s
            €r&   rE   ÚIdefics3Processor.__init__7   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ÚimagesÚtextr   rI   Úreturnc                 óâ  • U R                   " SXS.UD6u  pU R                  " SXS.UD6  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US   R                  SS5      n0 =pšUGb  U R                  " U40 US	   D6u  p›U	R                  S
S5        U	R                  SS5        UbÚ  U R                  X+S9u  p,U R                  " U40 US   D6n
U(       a  XÊS'   / n[        U5       Hg  u  pï/ nU HI  nUS   u  nnU
R                  UU5      nU
R                  UUS-
  5      nUR                  UU-
  S-   5        MK     UR                  U5        Mi     U(       a  U R                  U
S   U5      U
S'   U R                  X*S/S9  OUb  U R                  " SSU0US   D6n
[        0 U
EU	EUS9$ )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))
)rO   rP   Útokenizer_init_kwargsNr   Úreturn_text_replacement_offsetsFr   Úreturn_tensorsr   ÚrowsÚcols)Úimages_replacementsÚtext_replacement_offsetsÚnew_spanr2   Ú	input_idsÚmm_token_type_idsÚimage)Ú
modalitiesrP   )ÚdataÚtensor_typer   )Úprepare_inputs_layoutÚvalidate_inputsÚ_merge_kwargsr   rH   Úinit_kwargsr+   ÚpopÚ_process_imagesÚget_text_with_replacementsÚ	enumerateÚchar_to_tokenÚappendÚcreate_mm_token_type_idsÚ_check_special_mm_tokensr   )rF   rO   rP   r+   rI   Úoutput_kwargsrT   r   rU   Úimage_inputsÚtext_inputsrX   rY   Úbatch_image_seq_lengthsÚbatch_idÚtext_replacement_offsetÚimage_seq_lensr_   ÚstartÚendÚstart_id_posÚ
end_id_poss                         r&   Ú__call__ÚIdefics3Processor.__call__\   sW  € ð ×1Ò1ÐU¸ÑUÈfÑU‰ˆØ×ÒÐ@ FÑ@¸Ò@à×*Ò*Ü#ñ
à"&§.¡.×"<Ñ"<ð
ð ñ
ˆð *7Ñ)B™È×HZÑHZˆØ*7¸Ñ*F×*JÑ*JÐKlÐnsÓ*tÐ'Ø#0°Ñ#?×#CÑ#CÐD^Ð`eÓ#fÐ Ø& }Ñ5×9Ñ9Ð:JÈDÓQˆà%'Ð'ˆØÒØ04×0DÒ0DÀVÑ0nÈ}Ð]lÑOmÑ0nÑ-ˆLð ×Ñ˜V TÔ*Ø×Ñ˜V TÔ*àÑØ15×1PÑ1PØð 2Qð 2Ñ.�ð #Ÿnšn¨TÑR°]À=Ñ5QÑR�Þ2Ø>VÐ :Ñ;à*,Ð'Ü9BÐC[Ö9\Ñ5�HØ%'�NÛ 7˜Ø%)¨*Ñ%5™
˜˜sØ'2×'@Ñ'@ÀÈ5Ó'Q˜Ø%0×%>Ñ%>¸xÈÈqÉÓ%Q˜
à&×-Ñ-¨j¸<Ñ.GÈ!Ñ.KÖLñ !8ð ,×2Ñ2°>ÖBñ :]ö ,Ø7;×7TÑ7TØ# KÑ0Ð2Ió8�KÐ 3Ñ4ð ×-Ñ-¨dÈWÈIÐ-ÑVøàÑØŸ.š.ÑS¨dÐS°mÀMÑ6RÑSˆKäÐ!@ KÐ!@°<Ð!@ÈnÑ]Ð]r%   c                 ó‚  • Ub1  [        U[        5      (       a  U/n[        U5      R                  5       nUbü  U R                  R                  U5      n[        U5      (       a  U//nX4$ [        U[        [        45      (       a¯  [        US   5      (       aœ  Ub–  U Vs/ s H  oDR                  U R                  5      PM     nnS/[        [        U5      5      -   n[        [        U5      5       Vs/ s H  nXU   XgS-       PM     nn[        U5      US   :”  a  X�US   S  /-   nX4$ Un X4$ U/nX4$ s  snf s  snf )Nr   r2   éÿÿÿÿ)Ú
isinstanceÚstrÚlistÚcopyrG   Úfetch_imagesr	   ÚtupleÚcountr8   r   r?   Úlen)	rF   rO   rP   rI   ÚsampleÚn_images_in_textÚcumsum_images_in_textrJ   Úsplit_imagess	            r&   ra   Ú'Idefics3Processor.prepare_inputs_layout�   sp  € ð ÑÜ˜$¤×$Ñ$Ø�v�Ü˜“:—?‘?Ó$ˆDàÑØ×)Ñ)×6Ñ6°vÓ>ˆFÜ˜f×%Ñ%Ø!˜(˜�ð$ ˆ|Ðô# ˜F¤T¬5 M×2Ñ2´~ÀfÈQÁi×7PÑ7PØÑ#áUYÓ'ZÒUYÈ6¯©°T×5EÑ5EÖ(FÑUYÐ$Ð'ZØ-.¨C´$´zÐBRÓ7SÓ2TÑ,TÐ)ô "'¤sÐ+;Ó'<Ô!=ó$â!=˜Að °QÑ7Ð:OÐTUÑPUÑ:VÓWÙ!=ð !ð $ô
 ˜6“{Ð%:¸2Ñ%>Ó>Ø!-Ð8MÈbÑ8QÐ8SÐ1TÐ0UÑ!U˜ð ˆ|Ðð	 ".™ð ˆ|Ðð %˜X�Fàˆ|Ðùò ([ùò$s   Â$D7Ã3D<c                 óÌ  >• [         TU ]  " X40 UD6  Uc  Uc  [        S5      eUb´  U Vs/ s H  oDR                  U R                  5      PM     nnUbM  U Vs/ s H  n[        U5      PM     nnXW:w  a,  [        SU R                   SU SU R                   SU S3	5      eg Uc6  [        U5      (       a%  [        S[        U5       SU R                   S35      eg g g s  snf s  snf )	Nz+You must provide either `text` or `images`.z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 per sample.zFound z. tokens in the text but no images were passed.)rD   rb   Ú
ValueErrorr‚   r8   rƒ   ÚanyÚsum)	rF   rO   rP   rI   r„   r…   ÚsublistÚn_images_in_imagesrM   s	           €r&   rb   Ú!Idefics3Processor.validate_inputs¿   s  ø€ ô 	‰Ò Ñ7°Ò7à‰<˜F™NÜÐJÓKÐKàÑÙMQÓRÊTÀ6§¡¨T×-=Ñ-=Ö >ÉTÐÐRØÑ!ÙBHÓ%IÂ&°w¤c¨'¦lÁ&Ð"Ð%IØ#Ó9Ü$Ø.¨t×/?Ñ/?Ð.@ð A"Ø"2Ð!3°1°T×5EÑ5EÐ4FÀlÐSeÐRfÐfyð{óð ð :ð
 ‘¤CÐ(8×$9Ñ$9Ü ØœSÐ!1Ó2Ð3°1°T×5EÑ5EÐ4FÐFtÐuóð ð %:�ð ùÚRùâ%Is   «$CÁC!rn   Ú	image_idxc           	      ó¨  • US    VVs/ s H  oD  H  oUPM     M     snnU   nUS    VVs/ s H  ow  H  oˆPM     M     snnU   n	US:X  aJ  U	S:X  aD  U R                    U R                   -   U R                   U R                  -  -   U R                    -   $ Sn
[	        U5       HU  n[	        U	5       H>  nU
U R                    SUS-    SUS-    S3-   U R                   U R                  -  -   -  n
M@     U
S	-  n
MW     U
S	U R                    3U R                   -   U R                   U R                  -  -   U R                    -   -  n
U
$ s  snnf s  snnf )
NrV   rW   r   Ú r1   r2   r3   r4   Ú
)r7   r:   r8   r+   r?   )rF   rn   r‘   rI   Úrow_listÚrowÚ
image_rowsÚcol_listÚcolÚ
image_colsÚtext_split_imagesÚn_hÚn_ws                r&   Úreplace_image_tokenÚ%Idefics3Processor.replace_image_tokenØ   s§  € Ø*6°vÒ*>ÔSÒ*>˜hË(À3’cÉ(‘cÑ*>ÒSÐT]Ñ^ˆ
Ø*6°vÒ*>ÔSÒ*>˜hË(À3’cÉ(‘cÑ*>ÒSÐT]Ñ^ˆ
Ø˜‹?˜z¨Q›à×(Ñ(Ð)Ø×*Ñ*Ð+ñ-à×%Ñ%Ð&¨$×*<Ñ*<Ñ<ñ=ð ×*Ñ*Ð+ñ-ðð !#ÐÜ˜ZÖ(�Ü  Ö,�CØ%Ø×0Ñ0Ð1Ø! #¨¡' ¨%°°a±¨y¸Ð:ñ;à!×-Ñ-Ð.°$×2DÑ2DÑDñEñÒ%ñ -ð " TÑ)Ò!ñ )ð Ø�T×*Ñ*Ð+Ð,Ø×*Ñ*Ð+ñ-à×%Ñ%Ð&¨$×*<Ñ*<Ñ<ñ=ð ×*Ñ*Ð+ñ-ñÐð %Ð$ùó5 TùÛSs
   ‰E¬Er[   rp   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   r2   )
rh   ÚnpÚarrayÚ
zeros_likeÚwherer=   rƒ   Úsearchsortedrj   Útolist)rF   r[   rp   r\   rJ   Úseq_lengthsÚ	array_idsÚmm_token_typesÚimage_start_positionsrK   Úseq_lenrt   ru   s                r&   rk   Ú*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[        U R                  SSS9S   5      S-
  n	/ n
/ nU HA  u  pÍnXŽ-  S-   nUS	:”  a  U	OS	nU
R                  UU-   Xý-  -   5        UR                  U5        MC     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.
r   r   é   z

F)r   r[   r2   r   )Únum_image_tokensÚnum_image_patchesr   )r   r#   ÚgetÚupdaterG   Úget_number_of_image_patchesr+   rƒ   rH   rj   r
   )rF   Úimage_sizesrI   Úvision_datar   Ú
image_sizeÚnum_image_row_colsÚbase_image_lengthÚ
col_lengthÚextra_split_newliner¯   r°   Únum_patchesÚnum_rowsÚnum_colsÚ
row_lengthÚsplit_extras                    r&   Ú_get_num_multimodal_tokensÚ,Idefics3Processor._get_num_multimodal_tokens
  sC  € ð ˆØÑ"Ü3×=Ñ=×AÑAÀ/ÐSUÓVˆMØ× Ñ  Ô(ñ #.ó"â"-�Jð ×$Ñ$×@Ò@Ð\À*Ð\ÈmÕ\Ù"-ð ð "ð
 !%× 2Ñ 2°QÑ 6ÐØ×+Ñ+¨aÑ/ˆJô
 #& d§n¡n°VÐPU nÐ&VÐWbÑ&cÓ"dÐghÑ"hÐØ!ÐØ "Ðã3EÑ/� xØ'Ñ2°QÑ6�
Ø5=À³\Ñ1Àq�Ø ×'Ñ'Ð(9¸KÑ(GÈ:ÑK`Ñ(aÔbØ!×(Ñ(¨Ö5ñ	 4Fð ×ÑÐ4DÑmÔnäÑ, Ñ,Ð,ùò/"s   »(D)
rC   r9   r7   r=   r:   r>   r+   r8   r<   r@   )Né©   N)NNN)NN)N)r   r    r!   r"   r   Úvalid_processor_kwargsÚintr}   rE   r   r   r~   r   r   r   r   rx   ra   rb   Údictrž   rk   rÀ   r$   Ú__classcell__)rM   s   @r&   r)   r)   3   s½  ø† à4Ðð fjñ#\Ø>Að#\ØX[Ð^bÑXb÷#\ð #\ðJ ð JNØbfØ$(ñ	>^à˜T *Ñ-Ñ-°°T¸*Ñ5EÑ0FÑFð>^ð �IÐ2°D¸±OÀTÐJ]ÑE^Ð^Ñ_ð>^ð ˜T‘zð	>^ð
 Ð0Ñ1ð>^ð 
ô>^ó ð>^ðD %)Øbfñ à˜TÑ!ð ð �IÐ2°D¸±OÀTÐJ]ÑE^Ð^Ñ_ð ð Ð0Ñ1õ	 ðH %)Øbfñà˜TÑ!ðð �IÐ2°D¸±OÀTÐJ]ÑE^Ð^Ñ_ðð Ð0Ñ1÷	ð ð2%°ð %Àð %ÐSVô %ð:!°$ð !ÐQUÐVYÑQZð !Ð_cÐdhÐilÑdmÑ_nô !÷*)-ò )-r%   r)   )!Ú__doc__rA   Ú	itertoolsr   Útypingr   r   Únumpyr¡   Úfeature_extraction_utilsr   Úimage_utilsr   r	   Úprocessing_utilsr
   r   r   r   Útokenization_utils_baser   r   r   Úutilsr   r   r   Ú
get_loggerr   Úloggerr   r)   Ú__all__r   r%   r&   Ú<module>rÓ      s}   ðñó 
Ý  ß 'ã å 4ß 5ß XÓ Xß KÑ Kß ,ö Ý<à	×	Ò	˜HÓ	%€ôÐ.°eò ð ô-˜ó -ó ð-ðD Ð
�r%   