Ë
    ÛÓ^j-  ã                   óÈ   — d dl Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZmZ  ej$                  e«      Z G d„ d	ed
¬«      Ze G d„ de	«      «       ZdgZy)é    Né   )ÚBatchFeature)Ú
ImageInputÚmake_nested_list_of_images)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)ÚPreTokenizedInputÚ	TextInput)Úauto_docstringÚloggingÚ	to_py_objc                   ó(   — e Zd ZdddœddddddœdœZy	)
ÚGemma3ProcessorKwargsFT)ÚpaddingÚreturn_mm_token_type_idsé   é   g333333ó?)Údo_convert_rgbÚdo_pan_and_scanÚpan_and_scan_min_crop_sizeÚpan_and_scan_max_num_cropsÚ"pan_and_scan_min_ratio_to_activate)Útext_kwargsÚimages_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/gemma3/processing_gemma3.pyr   r      s,   „ ð Ø(,ñ
ð
 #Ø$Ø*-Ø*+Ø25ñ
ñ�Ir"   r   F)Útotalc            
       óà   ‡ — e Zd ZeZ	 	 ddefˆ fd„Ze	 	 ddedz  de	e
z  ee	   z  ee
   z  dee   defd„«       Zdd	„Zedee   fˆ fd
„«       Zedee   fd„«       Zedee   fd„«       Zˆ xZS )ÚGemma3ProcessorNÚimage_seq_lengthc                 ó  •— || _         |j                  | _        |j                  | _        dj                  |j                  g|z  «      }d|j                  › |› |j
                  › d�| _        t        ‰| �   d|||dœ|¤Ž y )NÚ z

)Úimage_processorÚ	tokenizerÚchat_templater!   )	r'   Úimage_token_idÚ	boi_tokenÚjoinÚimage_tokenÚ	eoi_tokenÚfull_image_sequenceÚsuperÚ__init__)Úselfr*   r+   r,   r'   ÚkwargsÚimage_tokens_expandedÚ	__class__s          €r#   r4   zGemma3Processor.__init__/   s–   ø€ ð !1ˆÔØ'×6Ñ6ˆÔØ"×,Ñ,ˆŒØ "§¡¨×)>Ñ)>Ð(?ÐBRÑ(RÓ SÐØ%)¨)×*=Ñ*=Ð)>Ð?TÐ>UÐV_×ViÑViÐUjÐjnÐ#oˆÔ ä‰Ñð 	
Ø+ØØ'ñ	
ð ó		
r"   ÚimagesÚtextr6   Úreturnc           
      óê  — |€|€t        d«      ‚ | j                  t        fd| j                  j                  i|¤Ž}t        |t        «      r|g}n.t        |t        «      st        |d   t        «      st        d«      ‚i }|��W| j                  j                  |«      }t        |«      } | j                  |fi |d   ¤Ž}|s5|D �cg c]*  }dj                  | j                  gt        |«      z  «      ‘Œ, }}t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d	�«      ‚t        |j!                  d
«      «      }|D ��cg c]3  }t#        t        |«      «      D �cg c]  }|j!                  d«      ‘Œ c}‘Œ5 }	}}t%        t'        |||	«      «      D �]  \  }
\  }}}t)        j*                  | j                  |«      D �cg c]  }|j-                  «       ‘Œ }}t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚t/        t        t'        ||«      «      «      D ]a  \  }}|sŒ	d| j                  › d�dj                  | j                  g|z  «      z   }|d | |z   ||t        | j                  «      z   d  z   }|||
<   Œc �Œ |D �cg c](  }|j1                  | j                  | j2                  «      ‘Œ* }}|d   j!                  dd «      }|d   j!                  dd«      } | j                  dd|i|d   ¤Ž}| j5                  ||dg¬«       |r| j7                  |d   «      |d<   t9        i |¥|¥|¬«      S c c}w c c}w c c}}w c c}w c c}w )Nz+Provide at least one of `text` or `images`.Útokenizer_init_kwargsr   zAInvalid input text. Please provide a string, or a list of stringsr   ú z1Received inconsistently sized batches of images (z) and text (z).Ú	num_cropszPrompt contained z image tokens but received z images.zHere is the original image z0 and here are some crops to help you see better r   Úreturn_tensorsr   Fr:   Úimage)Ú
modalitiesÚ	input_idsÚtoken_type_ids)ÚdataÚtensor_typer!   )Ú
ValueErrorÚ_merge_kwargsr   r+   Úinit_kwargsÚ
isinstanceÚstrÚlistÚ	TypeErrorr*   Úfetch_imagesr   r/   r.   Úlenr   ÚpopÚrangeÚ	enumerateÚzipÚreÚfinditerÚstartÚreversedÚreplacer2   Ú_check_special_mm_tokensÚcreate_mm_token_type_idsr   )r5   r9   r:   r6   Úoutput_kwargsÚimage_inputsÚbatched_imagesr?   Ú_Úbatch_num_cropsÚ	batch_idxÚpromptÚmÚimage_indexesÚnumÚidxÚformatted_image_textr@   r   Útext_inputss                       r#   Ú__call__zGemma3Processor.__call__D   sŽ  € ð ˆ<˜F˜NÜÐJÓKÐKà*˜×*Ñ*Ü!ñ
à"&§.¡.×"<Ñ"<ð
ð ñ
ˆô �dœCÔ Ø�6‰DÜ˜D¤$Ô'´
¸4À¹7ÄCÔ0HÜÐ_Ó`Ð`àˆØÑØ×)Ñ)×6Ñ6°vÓ>ˆFÜ7¸Ó?ˆNØ/˜4×/Ñ/°ÑY¸-ÈÑ:XÑYˆLñ ØO]Ö^ÀV˜Ÿ™ $§.¡.Ð!1´C¸³KÑ!?Õ@Ð^�Ð^ä�>Ó"¤c¨$£iÒ/Ü ØGÌÈNÓH[ÐG\Ð\hÔilÐmqÓirÐhsÐsuÐvóð ô
 " ,×"2Ñ"2°;Ó"?Ó@ˆIØ\j×kÐRX¼%ÄÀFÃÓ:LÖM°Q 	§¡¨aÕ 0ÔMÐkˆOÑkÜ:CÄCÈÈnÐ^mÓDnÓ:oó 1Ñ6�	Ñ6˜F F¨IÜ46·K±KÀÇÁÐPVÓ4WÖ X¨q §¡¥Ð X�Ð Xä�v“;¤# mÓ"4Ò4Ü$Ø+¬C°Ó,>Ð+?Ð?ZÔ[^Ð_eÓ[fÐZgÐgoÐpóð ô
 !)¬¬c°)¸]Ó.KÓ)LÓ Mò 1‘H�C˜Úà9¸$¿.¹.Ð9IÐIyÐzØ!Ÿh™h¨¯©Ð'7¸#Ñ'=Ó>ñ?ð -ð "(¨¨ Ð0DÑ!DÀvÈcÔTWÐX\×XfÑXfÓTgÑNgÐNiÐGjÑ!j˜Ø*0˜˜Yšò1ð1ð& \`Ö`ÐQW�F—N‘N 4§>¡>°4×3KÑ3KÕLÐ`ˆDÐ`à& }Ñ5×9Ñ9Ð:JÈDÓQˆØ#0°Ñ#?×#CÑ#CÐD^Ð`eÓ#fÐ Ø$�d—n‘nÑO¨$ÐO°-ÀÑ2NÑOˆØ×%Ñ% d¨KÀWÀIÐ%ÔNá#Ø,0×,IÑ,IÈ+ÐVaÑJbÓ,cˆKÐ(Ñ)ÜÐ!@ KÐ!@°<Ð!@ÈnÔ]Ð]ùòM _ùò  NùÓkùâ Xùò$ as*   Ã/MÅM%Å,M ÆM%ÇM+Ê,-M0Í M%c                 ó˜   — i }|�<| j                   gt        |«      z  }dgt        |«      z  }|j                  ||dœ«       t        di |¤ŽS )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.
        é   )Únum_image_tokensÚnum_image_patchesr!   )r'   rO   Úupdater   )r5   Úimage_sizesr6   Úvision_datark   rl   s         r#   Ú_get_num_multimodal_tokensz*Gemma3Processor._get_num_multimodal_tokens‰   s]   € ð ˆØÐ"à $× 5Ñ 5Ð6¼¸[Ó9IÑIÐØ!" ¤c¨+Ó&6Ñ 6Ðà×ÑÐ4DÐ[lÑmÔnäÑ, Ñ,Ð,r"   c                 ó    •— t         ‰| �  dgz   S )NrD   )r3   Úmodel_input_names)r5   r8   s    €r#   rr   z!Gemma3Processor.model_input_names    s   ø€ ä‰wÑ(Ð,<Ð+=Ñ=Ð=r"   c                 ó   — dgS )Nr?   r!   ©r5   s    r#   Úunused_input_namesz"Gemma3Processor.unused_input_names¤   s
   € àˆ}Ðr"   c                 óX   — t         j                  d«       | j                  j                  S )NzyDeprecated: `processor.image_token` will switch from returning `tokenizer.image_token` to `tokenizer.boi_token` in v5.11.)ÚloggerÚwarning_oncer+   r0   rt   s    r#   r0   zGemma3Processor.image_token¨   s(   € ä×ÑðIô	
ð �~‰~×)Ñ)Ð)r"   )Nr   )NN)N)r   r   r   r   Úvalid_processor_kwargsÚintr4   r   r   r   r   rL   r
   r   rh   rp   ÚpropertyrK   rr   ru   r0   Ú__classcell__)r8   s   @r#   r&   r&   +   sö   ø„ à2Ðð Ø #ñ
ð
 õ
ð* ð %)ØZ^ñB^à˜TÑ!ðB^ð Ð+Ñ+¨d°9©oÑ=ÀÐEVÑ@WÑWðB^ð Ð.Ñ/ð	B^ð
 
òB^ó ðB^óH-ð. ð> 4¨¡9ô >ó ð>ð ð D¨¡Iò ó ðð ð*˜T #™Yò *ó ô*r"   r&   )rT   Úfeature_extraction_utilsr   Úimage_utilsr   r   Úprocessing_utilsr   r   r	   r
   Útokenization_utils_baser   r   Úutilsr   r   r   Ú
get_loggerr   rw   r   r&   Ú__all__r!   r"   r#   ú<module>r„      sk   ðó 
å 4ß Aß XÓ Xß Cß 7Ñ 7ð 
ˆ×	Ñ	˜HÓ	%€ôÐ,°Eõ ð  ôB*�nó B*ó ðB*ðJ Ð
�r"   