§
    ‚Štj-  ã                   óØ   — 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dS )é    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d	S )
Ú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© ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/gemma3/processing_gemma3.pyr   r      sG   € € € € € ð Ø(,ð
ð 
ð
 #Ø$Ø*-Ø*+Ø25ð
ð 
ðð €I€I€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 )ÚGemma3ProcessorNr   Úimage_seq_lengthc                 óî   •— || _         |j        | _        |j        | _        d                     |j        g|z  ¦  «        }d|j        › |› |j        › d�| _         t          ¦   «         j        d|||dœ|¤Ž d S )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ˆÔØ"Ô,ˆŒØ "§¢¨Ô)>Ð(?ÐBRÑ(RÑ SÔ SÐØ#o¨)Ô*=Ð#oÐ?TÐ#oÐV_ÔViÐ#oÐ#oÐ#oˆÔ à�‰ŒÔð 	
Ø+ØØ'ð	
ð 	
ð ð		
ð 	
ð 	
ð 	
ð 	
r"   ÚimagesÚtextr6   Úreturnc           	      óh  ‡ ‡— |€|€t          d¦  «        ‚ ‰ j        t          fd‰ j        j        i|¤Ž}t          |t          ¦  «        r|g}n?t          |t          ¦  «        s*t          |d         t          ¦  «        st          d¦  «        ‚i }|��‰ j	         
                    |¦  «        }t          |¦  «        } ‰ j	        |fi |d         ¤Ž}|sˆ fd„|D ¦   «         }t          |¦  «        t          |¦  «        k    r0t          dt          |¦  «        › dt          |¦  «        › d	�¦  «        ‚t          |                     d
¦  «        ¦  «        Šˆfd„|D ¦   «         }t          t!          |||¦  «        ¦  «        D �]\  }\  }	}Šd„ t#          j        ‰ j        |	¦  «        D ¦   «         }
t          |¦  «        t          |
¦  «        k    r0t          dt          |
¦  «        › dt          |¦  «        › d�¦  «        ‚t)          t          t!          ‰|
¦  «        ¦  «        ¦  «        D ]c\  }}|r\d‰ j        › d�d                     ‰ j        g|z  ¦  «        z   }|	d |…         |z   |	|t          ‰ j        ¦  «        z   d …         z   }	|	||<   Œd�Œˆ fd„|D ¦   «         }|d                              dd ¦  «        }|d                              dd¦  «        } ‰ j        dd|i|d         ¤Ž}‰                      ||dg¬¦  «         |r‰                      |d         ¦  «        |d<   t1          i |¥|¥|¬¦  «        S )Nz+Provide at least one of `text` or `images`.Útokenizer_init_kwargsr   zAInvalid input text. Please provide a string, or a list of stringsr   c                 óf   •— g | ]-}d                       ‰j        gt          |¦  «        z  ¦  «        ‘Œ.S )ú )r/   r.   Úlen)Ú.0r9   r5   s     €r#   ú
<listcomp>z,Gemma3Processor.__call__.<locals>.<listcomp>a   s5   ø€ Ð^Ð^Ð^ÀV˜Ÿš $¤.Ð!1µC¸±K´KÑ!?Ñ@Ô@Ð^Ð^Ð^r"   z1Received inconsistently sized batches of images (z) and text (z).Ú	num_cropsc                 ó`   •— g | ]*}ˆfd „t          t          |¦  «        ¦  «        D ¦   «         ‘Œ+S )c                 ó:   •— g | ]}‰                      d ¦  «        ‘ŒS )r   )Úpop)rA   Ú_rC   s     €r#   rB   z7Gemma3Processor.__call__.<locals>.<listcomp>.<listcomp>j   s%   ø€ ÐMÐMÐM°Q 	§¢¨aÑ 0Ô 0ÐMÐMÐMr"   )Úranger@   )rA   r9   rC   s     €r#   rB   z,Gemma3Processor.__call__.<locals>.<listcomp>j   s=   ø€ ÐkÐkÐkÐRXÐMÐMÐMÐM½%ÅÀFÁÄÑ:LÔ:LÐMÑMÔMÐkÐkÐkr"   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r!   )Ústart)rA   Úms     r#   rB   z,Gemma3Processor.__call__.<locals>.<listcomp>l   s    € Ð XÐ XÐ X¨q §¢¡¤Ð XÐ XÐ Xr"   z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?   c                 óP   •— g | ]"}|                      ‰j        ‰j        ¦  «        ‘Œ#S r!   )Úreplacer.   r2   )rA   Úpromptr5   s     €r#   rB   z,Gemma3Processor.__call__.<locals>.<listcomp>~   s-   ø€ Ð`Ð`Ð`ÐQW�F—N’N 4¤>°4Ô3KÑLÔLÐ`Ð`Ð`r"   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   rF   Ú	enumerateÚzipÚreÚfinditerr.   Úreversedr/   Ú_check_special_mm_tokensÚcreate_mm_token_type_idsr   )r5   r9   r:   r6   Úoutput_kwargsÚimage_inputsÚbatched_imagesÚbatch_num_cropsÚ	batch_idxrN   Úimage_indexesÚnumÚidxÚformatted_image_textrO   r   Útext_inputsrC   s   `                @r#   Ú__call__zGemma3Processor.__call__D   sÐ  øø€ ð ˆ<˜F˜NÝÐJÑKÔKÐKà*˜Ô*Ý!ð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆõ �d�CÑ Ô ð 	aØ�6ˆDˆDÝ˜D¥$Ñ'Ô'ð 	aµ
¸4À¼7ÅCÑ0HÔ0Hð 	aÝÐ_Ñ`Ô`Ð`àˆØÑØÔ)×6Ò6°vÑ>Ô>ˆFÝ7¸Ñ?Ô?ˆNØ/˜4Ô/°ÐYÐY¸-ÈÔ:XÐYÐYˆLð ð _Ø^Ð^Ð^Ð^È~Ð^Ñ^Ô^�å�>Ñ"Ô"¥c¨$¡i¤iÒ/Ð/Ý ØvÍÈNÑH[ÔH[ÐvÐvÕilÐmqÑirÔirÐvÐvÐvñô ð õ
 " ,×"2Ò"2°;Ñ"?Ô"?Ñ@Ô@ˆIØkÐkÐkÐkÐ\jÐkÑkÔkˆOÝ:CÅCÈÈnÐ^mÑDnÔDnÑ:oÔ:oð 1ñ 1Ñ6�	Ñ6˜F F¨IØ XÐ XµB´KÀÄÐPVÑ4WÔ4WÐ XÑ XÔ X�å�v‘;”;¥# mÑ"4Ô"4Ò4Ð4Ý$Øp­C°Ñ,>Ô,>ÐpÐpÕ[^Ð_eÑ[fÔ[fÐpÐpÐpñô ð õ
 !)­­c°)¸]Ñ.KÔ.KÑ)LÔ)LÑ MÔ Mð 1ð 1‘H�C˜Øð 1àz¸$¼.ÐzÐzÐzØ!Ÿhšh¨¬Ð'7¸#Ñ'=Ñ>Ô>ñ?ð -ð "(¨¨¨¤Ð0DÑ!DÀvÈcÕTWÐX\ÔXfÑTgÔTgÑNgÐNiÐNiÔGjÑ!j˜Ø*0˜˜Y™øñ1ð aÐ`Ð`Ð`Ð[_Ð`Ñ`Ô`ˆDà& }Ô5×9Ò9Ð:JÈDÑQÔQˆØ#0°Ô#?×#CÒ#CÐD^Ð`eÑ#fÔ#fÐ Ø$�d”nÐOÐO¨$ÐO°-ÀÔ2NÐOÐOˆØ×%Ò% d¨KÀWÀIÐ%ÑNÔNÐNà#ð 	dØ,0×,IÒ,IÈ+ÐVaÔJbÑ,cÔ,cˆKÐ(Ñ)ÝÐ!@ KÐ!@°<Ð!@ÈnÐ]Ñ]Ô]Ð]r"   c                 ó¨   — i }|�C| j         gt          |¦  «        z  }dgt          |¦  «        z  }|                     ||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.
        Né   )Únum_image_tokensÚnum_image_patchesr!   )r'   r@   Úupdater   )r5   Úimage_sizesr6   Úvision_datarr   rs   s         r#   Ú_get_num_multimodal_tokensz*Gemma3Processor._get_num_multimodal_tokens‰   so   € ð ˆØÐ"à $Ô 5Ð6½¸[Ñ9IÔ9IÑIÐØ!" ¥c¨+Ñ&6Ô&6Ñ 6Ðà×ÒÐ4DÐ[lÐmÐmÑnÔnÐnåÐ,Ð, Ð,Ð,Ð,r"   c                 ó2   •— t          ¦   «         j        dgz   S )NrS   )r3   Úmodel_input_names)r5   r8   s    €r#   ry   z!Gemma3Processor.model_input_names    s   ø€ å‰wŒwÔ(Ð,<Ð+=Ñ=Ð=r"   c                 ó   — dgS )NrC   r!   ©r5   s    r#   Úunused_input_namesz"Gemma3Processor.unused_input_names¤   s
   € àˆ}Ðr"   c                 óN   — t                                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   r{   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   r[   r
   r   ro   rw   ÚpropertyrZ   ry   r|   r0   Ú__classcell__)r8   s   @r#   r&   r&   +   s„  ø€ € € € € à2Ðð Ø #ð
ð 
ð
 ð
ð 
ð 
ð 
ð 
ð 
ð* ð %)ØZ^ðB^ð B^à˜TÑ!ðB^ð Ð+Ñ+¨d°9¬oÑ=ÀÐEVÔ@WÑWðB^ð Ð.Ô/ð	B^ð
 
ðB^ð B^ð B^ñ „^ðB^ðH-ð -ð -ð -ð. ð> 4¨¤9ð >ð >ð >ð >ð >ñ „Xð>ð ð D¨¤Ið ð ð ñ „Xðð ð*˜T #œYð *ð *ð *ñ „Xð*ð *ð *ð *ð *r"   r&   )r`   Úfeature_extraction_utilsr   Úimage_utilsr   r   Úprocessing_utilsr   r   r	   r
   Útokenization_utils_baser   r   Úutilsr   r   r   Ú
get_loggerr   r~   r   r&   Ú__all__r!   r"   r#   ú<module>r‹      s'  ðð 
€	€	€	à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð Ð,°Eð ñ ô ð ð  ðB*ð B*ð B*ð B*ð B*�nñ B*ô B*ñ „ðB*ðJ Ð
€€€r"   