+
    œ°³jX6  ã                   ó$  € ^ RI t^RIHt ^RIHtHt ^RIHtH	t	H
t
Ht ^RIHtHt ^RIHtHtHt ^RIHt ^RIHt ]! 4       '       d	   ^R	IHtHt ]P4                  ! ]4      t ! R
 R]	RR7      t]]! RR7       ! R R]
4      4       4       tR.tR# )é    N)Ú
AudioInput)Ú
ImageInputÚmake_nested_list_of_images)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)ÚPreTokenizedInputÚ	TextInput)Úauto_docstringÚis_vision_availableÚlogging)Úrequires)Ú
VideoInput)ÚGemma4ImageProcessorKwargsÚ get_aspect_ratio_preserving_sizec            	       óP   a € ] tR t^"t o RRRRR/RRR/R/ RR	R//tV 3R
 ltRtV tR# )ÚGemma4ProcessorKwargsÚtext_kwargsÚpaddingTÚreturn_mm_token_type_idsÚimages_kwargsÚdo_convert_rgbÚaudio_kwargsÚvideos_kwargsÚreturn_metadatac                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )é   r   )r   )ÚformatÚ__classdict__s   "€Úm/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/gemma4/processing_gemma4.pyÚ__annotate__Ú"Gemma4ProcessorKwargs.__annotate__"   s   ø‡ ‚ Ù-Ñ-ò ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	_defaultsÚ__annotate_func__Ú__static_attributes__Ú__classdictcell__)r    s   @r!   r   r   "   sH   ø‡ € ð 	Ø�tØ&¨ð
ð 	Ø˜dð
ð 	˜ØÐ+¨TÐ2ð
€I÷ ƒ r$   r   F)Útotal)Úbackendsc                   ó  a a€ ] tR t^1t o]tRV3R lV 3R llltRV3R lV 3R llltRV3R lV 3R llltV3R lR lt	V3R	 lR
 lt
V3R lR ltRR ltV3R lR lt]V 3R l4       t]V3R lR l4       tRtVtV ;t# )ÚGemma4Processorc                ó,   <€ V ^8„  d   QhRS[ RS[ RS[ /# )r   Úimage_seq_lengthÚaudio_seq_lengthÚaudio_ms_per_token©Úint)r   r    s   "€r!   r"   ÚGemma4Processor.__annotate__6   s+   ø€ ÷ 6
ñ 6
ñ ð6
ñ ð6
ñ  ñ6
r$   c	                óî  <€ W`n         VP                  V n        VP                  V n        VP                  V n        VP                  V n        VP                  RR./4       RV n        VP                  V P                  4      V n        Wpn	        W€n
        \        VRR4      V n        \        VRR4      V n        \        VRR4      V n        \        VRR4      V n        \         S
V `D  ! RRVR	VR
VRVRV/V	B  R# )u  
image_seq_length (`int`, *optional*, defaults to 280):
    The number of soft tokens per image used for placeholder expansion.
audio_seq_length (`int`, *optional*, defaults to 750):
    The maximum number of audio soft tokens per audio segment. Serves as an
    upper-bound cap when dynamic audio token counts are computed.
audio_ms_per_token (`int`, *optional*, defaults to 40):
    Milliseconds of audio per output soft token. Used to dynamically compute
    the number of audio placeholder tokens as ``ceil(duration_ms / audio_ms_per_token)``.
    The default of 40 comes from the SSCP convolution's 4Ã— time reduction on 10ms frames.
Úadditional_special_tokensz	<|video|>Úaudio_token_idNÚaudio_tokenÚ	boa_tokenÚ	eoa_tokenÚfeature_extractorÚimage_processorÚ	tokenizerÚvideo_processorÚchat_templater%   )r3   Úimage_token_idÚ	boi_tokenÚ	eoi_tokenÚimage_tokenÚadd_special_tokensÚvideo_tokenÚconvert_tokens_to_idsÚvideo_token_idr4   r5   Úgetattrr;   r<   r=   r>   ÚsuperÚ__init__)Úselfr?   r@   rA   rB   rC   r3   r4   r5   ÚkwargsÚ	__class__s   &&&&&&&&&,€r!   rN   ÚGemma4Processor.__init__6   s  ø€ ð. !1ÔØ'×6Ñ6ˆÔØ"×,Ñ,ˆŒØ"×,Ñ,ˆŒØ$×0Ñ0ˆÔð 	×$Ñ$Ð&AÀKÀ=Ð%QÔRØ&ˆÔØ'×=Ñ=¸d×>NÑ>NÓOˆÔð !1Ôð #5ÔÜ% iÐ1AÀ4ÓHˆÔÜ" 9¨m¸TÓBˆÔÜ  ¨K¸Ó>ˆŒÜ  ¨K¸Ó>ˆŒä‰Òñ 	
Ø/ð	
à+ð	
ð  ð	
ð ,ð		
ð
 (ð	
ð ô	
r$   c                ó�   <€ V ^8„  d   QhRS[ R,          RS[S[,          S[S[,          ,          S[S[,          ,          RS[RS[/# )r   ÚimagesNÚtextÚvideosÚaudio)r   r   r
   Úlistr   r   )r   r    s   "€r!   r"   r8   n   sR   ø€ ÷ +ñ +á˜TÕ!ð+ñ Ñ+Õ+©d±9­oÕ=ÁÑEVÕ@WÕWð+ñ ð	+ñ
 ñ+r$   c                óZ  <€ \         SV `  ! RR VRVRVRV/VB w  rr4Ve   \        V4      pV'       dD   V'       g<   V Uu. uF/  pRP                  V P                  .\        V4      ,          4      NK1  	  ppV'       d&   V'       g   V P                  .\        V4      ,          pWW43# u upi )rT   rU   rV   rW   Ú r%   )rM   Úprepare_inputs_layoutr   ÚjoinrG   Úlenr<   )rO   rT   rU   rV   rW   rP   Ú
image_listrQ   s   &&&&&, €r!   r[   Ú%Gemma4Processor.prepare_inputs_layoutn   s¸   ø€ ô ',¡gÒ&Cñ '
Øð'
Ø $ð'
Ø-3ð'
Ø;@ð'
ØDJñ'
Ñ#ˆ�fð
 ÒÜ/°Ó7ˆF÷ Ÿ$ÙU[Ó\ÑU[Àz�C—H‘H˜d×.Ñ.Ð/´#°j³/ÕAÖBÑU[ˆDÐ\ßŸØ×$Ñ$Ð%¬¨E«
Õ2ˆDà˜VÐ*Ð*ùò	 ]s   Á 5B(c                óÆ   <€ V ^8„  d   QhRS[ S[S[ ,          ,          R,          RS[S[,          S[S[,          ,          S[S[,          ,          RS[RS[RS[S[,          /# )r   rT   NrU   rV   rW   rP   )r   rX   r   r
   r   r   r	   r   )r   r    s   "€r!   r"   r8   †   sl   ø€ ÷ !ñ !á™T¡*Õ-Õ-°Õ4ð!ñ Ñ+Õ+©d±9­oÕ=ÁÑEVÕ@WÕWð!ñ ð	!ñ
 ð!ñ Ñ)Õ*ñ!r$   c                óÐ  <€ \         S
V `  ! RR VRV/VB  Vf   Vf   \        R4      hVe   V P                  e   V P                  e   V P
                  f   \        R4      hVe÷   V Uu. uF  qfP                  V P                  4      NK  	  ppVeŒ   \        V4      \        V4      8w  d%   \        R\        V4       R\        V4       R24      hV Uu. uF  p\        V4      NK  	  p	pWy8w  d-   \        RV P                   R	V R
V P                   RV	 R2	4      hR# Vf9   \        V4      '       d&   \        R\        V4       R
V P                   R24      hR# R# R# u upi u upi )rT   rU   Nz+You must provide either `text` or `images`.zUAudio inputs were provided, but the tokenizer does not have an `audio_token` defined.z1Received inconsistently sized batches of images (z) and text (z).zThe total number of zP tokens in the prompts should be the same as the number of images passed. Found rZ   z tokens and z images per sample.zFound z. tokens in the text but no images were passed.r%   )rM   Úvalidate_inputsÚ
ValueErrorr<   r=   r>   ÚcountrG   r]   ÚanyÚsum)rO   rT   rU   rV   rW   rP   ÚsampleÚn_images_in_textÚsublistÚn_images_in_imagesrQ   s   &&&&&,    €r!   rb   ÚGemma4Processor.validate_inputs†   s”  ø€ ô 	‰ÒÑC vÐC°DÐC¸FÒCàŠ<˜FšNÜÐJÓKÐKàÒ ×!1Ñ!1Ò!9¸T¿^¹^Ò=SÐW[×WeÑWeÒWmÜÐtÓuÐuàÒÙMQÓRÉTÀ6§¡¨T×-=Ñ-=Ö >ÉTÐÐRØÒ!Ü�v“;¤# d£)Ô+Ü$ØKÌCÐPVËKÈ=ÐXdÔehÐimÓenÐdoÐoqÐróð ñ CIÓ%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ùò &Js   Á*#EÃE#c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   Úimage_inputsÚ	image_idxÚreturn©Údictr7   Ústr)r   r    s   "€r!   r"   r8   ©   s(   ø€ ÷ Wñ W±ð WÁð WÑSVñ Wr$   c                ó|   € VR ,          V,          pV P                    V P                  V,           V P                   2# )Únum_soft_tokens_per_image)rE   rG   rF   )rO   rm   rn   rP   Únum_soft_tokenss   &&&, r!   Úreplace_image_tokenÚ#Gemma4Processor.replace_image_token©   s;   € Ø&Ð'BÕCÀIÕNˆØ—.‘.Ð! $×"2Ñ"2°_Õ"DÐ!EÀdÇnÁnÐEUÐVÐVr$   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   Úvideo_inputsÚ	video_idxro   rp   )r   r    s   "€r!   r"   r8   ­   s#   ø€ ÷ !ñ !±ð !Áð !ÑSVñ !r$   c           
     ó  € VR ,          V,          pVR,          V,          pVP                   f   \        P                  R4       VP                   f   ^MVP                   Vn         VP                   Uu. uF,  p\	        V^<,          4      R R\	        V^<,          4      R 2NK.  	  ppRP                  V Uu. uF2  qˆ RV P                   V P                  V,           V P                   2NK4  	  up4      p	V	# u upi u upi )Únum_soft_tokens_per_videoÚvideo_metadataa  Gemma4 requires frame timestamps to construct prompts, but the `fps` of the input video could not be inferred. Probably `video_metadata` was missing from inputs and you passed pre-sampled frames. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.Ú02dÚ:rZ   )	ÚfpsÚloggerÚwarning_onceÚ
timestampsr7   r\   rE   rI   rF   )
rO   ry   rz   rP   ru   ÚmetadataÚsecondsÚtimestamp_strÚtÚvideo_replacements
   &&&,      r!   Úreplace_video_tokenÚ#Gemma4Processor.replace_video_token­   sø   € Ø&Ð'BÕCÀIÕNˆØÐ 0Õ1°)Õ<ˆà�<‰<ÒÜ×Ñðeôð
 &Ÿ\™\Ò1‘r°x·|±|ˆŒð ]e×\oÒ\oÓpÑ\oÐQXœC ¨2¥Ó.¨sÐ3°1´S¸À2½Ó5FÀsÐ4KÓLÑ\oˆÐpØŸH™HÙboÓpÑboÐ]^ˆs�!�D—N‘NÐ# D×$4Ñ$4°Õ$FÐ#GÈÏÉÐGWÓXÑboÑpó
Ðð !Ð ùò	 qùâps   Á32C7Â68C<c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   Úaudio_inputsÚ	audio_idxro   rp   )r   r    s   "€r!   r"   r8   À   s(   ø€ ÷ Wñ W±ð WÁð WÑSVñ Wr$   c                óN  € VR ,          V,          p\        V4      p\        ^4       F8  pV^,           ^,
          ^,          ^,           pVR,          RV p\        V4      pK:  	  V P                   V P                  \	        VP                  4       4      ,           V P                   2# )Úinput_features_mask:NNr   N)r]   Úranger=   r<   r7   rf   r>   )rO   rŒ   r�   rP   Úmaskr‡   Ú_Út_outs   &&&,    r!   Úreplace_audio_tokenÚ#Gemma4Processor.replace_audio_tokenÀ   s�   € àÐ1Õ2°9Õ=ˆô �‹IˆÜ�q–ˆAØ˜•U˜Q•Y 1Õ$ qÕ(ˆEØ˜•9˜V˜eÐ$ˆDÜ�D“	ŠAñ ð
 —.‘.Ð! $×"2Ñ"2´S¸¿¹»³_Õ"DÐ!EÀdÇnÁnÐEUÐVÐVr$   c           	     ó¤  € \         P                  P                  R/ 4      pVP                  V4       VP                  RR4      ;'       g    V P                  P
                  pVP                  RR4      ;'       g    V P                  P                  pVP                  RR4      ;'       g    V P                  P                  pWv^,          ,          p/ p	Ve‰   . p
V FX  p\        V^ ,          V^,          VVVR7      w  rÍWÅ,          pWÕ,          pV
P                  Wï,          V^,          ,          4       KZ  	  ^.\        V4      ,          pV	P                  RV
RV/4       Ve`   \        V P                  R	R
4      pV Uu. uF)  pV P                  \        P                  ! V4      V4      NK+  	  ppV	P                  RV/4       \!        R/ V	B # u upi )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.
    audio_lengths (`list[int]`, *optional*):
        The lengths of audio inputs in number of samples. Used to dynamically
        compute per-audio token counts.

Returns:
    `MultiModalData`: A `MultiModalData` object holding number of tokens per each of the provided
    input modalities, along with other useful data.
r   Ú
patch_sizeNÚpooling_kernel_sizeÚmax_soft_tokens)ÚheightÚwidthr—   Úmax_patchesr˜   Únum_image_tokensÚnum_image_patchesÚsampling_ratei€>  Únum_audio_tokensr%   )r   r*   ÚgetÚupdater@   r—   r˜   r™   r   Úappendr]   rL   r?   Ú_compute_audio_num_tokensÚnpÚzerosr   )rO   Úimage_sizesÚaudio_lengthsrP   r   r—   r˜   r™   rœ   Úvision_datar�   Ú
image_sizeÚtarget_hÚtarget_wÚpatch_heightÚpatch_widthrž   rŸ   Úlengthr    s   &&&,                r!   Ú_get_num_multimodal_tokensÚ*Gemma4Processor._get_num_multimodal_tokensÍ   sÇ  € ô  .×7Ñ7×;Ñ;¸OÈRÓPˆØ×Ñ˜VÔ$Ø"×&Ñ& |°TÓ:×]Ð]¸d×>RÑ>R×>]Ñ>]ˆ
à×ÑÐ3°TÓ:×fÐf¸d×>RÑ>R×>fÑ>fð 	ð (×+Ñ+Ð,=¸tÓD×lÐlÈ×H\ÑH\×HlÑHlˆà%¸QÕ(>Õ>ˆàˆØÒ"Ø!ÐÛ)�
Ü%EØ% a�=Ø$ Q�-Ø)Ø +Ø(;ô&Ñ"�ð  (Õ5�Ø&Õ4�Ø ×'Ñ'¨Õ(BÐFYÐ[\ÕF\Õ(\Ö]ñ *ð "# ¤c¨+Ó&6Õ 6ÐØ×ÑÐ 2Ð4DÐFYÐ[lÐmÔnàÒ$ô $ D×$:Ñ$:¸OÈVÓTˆMá^kó Ù^kÐTZ�×.Ñ.¬r¯xªx¸Ó/?ÀÖOÑ^kð ð  ð ×ÑÐ 2Ð4DÐEÔFäÑ, Ñ,Ð,ùò s   Å>/Gc                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   rŸ   ro   r6   )r   r    s   "€r!   r"   r8     s   ø€ ÷ &-ñ &-Ásð &-Ésñ &-r$   c                óª  € \        V4      pV P                  P                  ^,           pV P                  P                  ^,          pW5,           V,
          V P                  P                  ,          ^,           pV^ 8:  d   ^ # ^p^^^r©pTp\	        V4       F(  pV^V
,          ,           V,
          V	,          ^,           pK*  	  \        W°P                  4      # )aP  Number of audio soft tokens, replicating the encoder's seq-length arithmetic.

Mirrors Gemma4AudioFeatureExtractor mel framing + the two stride-2 Conv2d
subsampling layers in Gemma4AudioSubSampleConvProjection, capped at
``audio_seq_length``. Must match ``audio_mask.sum()`` from the audio tower or
vLLM's ``_merge_multimodal_embeddings`` will raise on a length mismatch.

Args:
    audio_waveform: A 1-D array or list containing the raw audio samples.
    sampling_rate: The sampling rate of the audio waveform in Hz.

Returns:
    The number of audio soft tokens to insert as placeholders.
)r]   r?   Úframe_lengthÚ
hop_lengthr�   Úminr4   )rO   Úaudio_waveformrŸ   Únum_samplesÚframe_size_for_unfoldÚpad_leftÚnum_mel_framesÚsscp_num_layersÚsscp_kernelÚsscp_strideÚsscp_paddingr‡   r’   s   &&&          r!   r¤   Ú)Gemma4Processor._compute_audio_num_tokens  sÄ   € ô ˜.Ó)ˆð !%× 6Ñ 6× CÑ CÀaÕ GÐØ×)Ñ)×6Ñ6¸!Õ;ˆØ%Õ0Ð3HÕHÈT×McÑMc×MnÑMnÕnÐqrÕrˆØ˜QÔÙð ˆØ12°A°q ,ˆØˆÜ�Ö'ˆAà�Q˜Õ%Õ%¨Õ3¸ÕCÀaÕGŠAñ (ô
 �1×+Ñ+Ó,Ð,r$   c                ó(   <€ \         SV `  R .,           # )Úmm_token_type_ids)rM   Úmodel_input_names)rO   rQ   s   &€r!   rÃ   Ú!Gemma4Processor.model_input_names,  s   ø€ ä‰wÑ(Ð,?Ð+@Õ@Ð@r$   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r   ro   )rX   rr   )r   r    s   "€r!   r"   r8   1  s   ø€ ÷ Jñ J¡D©¥Iñ Jr$   c                ó
   € R R.# )rt   r|   r%   )rO   s   &r!   Úunused_input_namesÚ"Gemma4Processor.unused_input_names0  s   € à+Ð-HÐIÐIr$   )r5   r4   r<   r;   r=   rE   r>   rF   r3   rG   rD   rI   rK   )Ni  iî  é(   )NNNN)NN)r&   r'   r(   r)   r   Úvalid_processor_kwargsrN   r[   rb   rv   r‰   r”   r°   r¤   ÚpropertyrÃ   rÇ   r,   r-   Ú__classcell__)rQ   r    s   @@r!   r1   r1   1   s’   ù‡ € ð 3Ð÷6
õ 6
÷p+õ +÷0!õ !÷FWð W÷!ð !÷&Wð Wô5-÷n&-ð &-ðP ôAó ðAð ÷Jó ÷Jð Jr$   r1   )Úvision) Únumpyr¥   Úaudio_utilsr   Úimage_utilsr   r   Úprocessing_utilsr   r   r   r	   Útokenization_utils_baser
   r   Úutilsr   r   r   Úutils.import_utilsr   Úvideo_utilsr   Úimage_processing_gemma4r   r   Ú
get_loggerr&   r�   r   r1   Ú__all__r%   r$   r!   Ú<module>rÙ      s�   ðó  å %ß Aß XÓ Xß Cß AÑ AÝ *Ý %ñ ×Òßeð 
×	Ò	˜HÓ	%€ôÐ,°Eõ ð Ù	�;ÔôJ�nó Jó  ó ðJðD Ð
‚r$   