§
    ‚Štj*Š  ã                   ó*  — d Z ddlZddlmZ ddlZddlmZ ddl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mZ dd
lmZ  ej        e¦  «        Z e¦   «         rddlZdZdZdZdZ dZ!dZ"dZ#dZ$dZ% G d„ ded¬¦  «        Z&de'e(         de'd         de(de(de(de(ddfd „Z)d!ee'e'e(                  df         d"dd#e'e'd                  de(d$e(de'd         fd%„Z*d&e+de+fd'„Z,d&e+de'fd(„Z-d&e+d)e.de'e(         fd*„Z/d+e+d)e.de'e(         fd,„Z0d-e'e'e+                  d.e'e'd                  dz  d/e(d0e(d1e1d2e1de2d3         fd4„Z3d5„ Z4d6„ Z5d7e.d8e.d)e.de'e(         fd9„Z6d:e.d;e.d<e.d=e.d)e.de'e(         fd>„Z7 ed?¬@¦  «        e G dA„ dBe¦  «        ¦   «         ¦   «         Z8dBgZ9dS )Cz$
Image/Text processor class for GIT
é    N)ÚUnioné   )ÚBatchFeature)Ú
ImageInput)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)ÚPreTokenizedInputÚ	TextInput)Úauto_docstringÚis_torch_availableÚloggingÚrequires_backends)Úrequiresz<box>z</box>z<point>z</point>z<0x00>z<0x01>z<0x02>z<0x03>z<0x04>c                   ó.   — e Zd ZdddddddddddddœiZdS )ÚFuyuProcessorKwargsÚtext_kwargsTFr   )Úadd_special_tokensÚpaddingÚstrideÚreturn_attention_maskÚreturn_overflowing_tokensÚreturn_special_tokens_maskÚreturn_offsets_mappingÚreturn_token_type_idsÚreturn_lengthÚverboseÚreturn_mm_token_type_idsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/fuyu/processing_fuyu.pyr   r   7   sC   € € € € € àØ"&ØØØ%)Ø).Ø*/Ø&+Ø%*Ø"ØØ(-ð
ð 
ð€I€I€Ir%   r   F)ÚtotalÚall_bi_tokens_to_placeÚfull_unpacked_streamútorch.TensorÚ
fill_valueÚ
batch_sizeÚnew_seq_lenÚoffsetÚreturnc                 ó"  — t          | ¦  «        |k    sJ ‚t          |¦  «        |k    sJ ‚t          j        ||g||d         j        |d         j        ¬¦  «        }t          |¦  «        D ]$}| |         }||         |||z   …         ||d|…f<   Œ%|S )zÍTakes an unpacked stream of tokens (i.e. a list of tensors, one for each item in the batch) and does
    the required padding to create a single tensor for the batch of shape batch_size x new_seq_len.
    r   )r+   ÚdtypeÚdeviceN)ÚlenÚtorchÚfullr1   r2   Úrange)	r(   r)   r+   r,   r-   r.   Únew_padded_tensorÚbiÚtokens_to_places	            r&   Úfull_unpacked_stream_to_tensorr:   I   sÌ   € õ Ð%Ñ&Ô&¨*Ò4Ð4Ð4Ð4ÝÐ#Ñ$Ô$¨
Ò2Ð2Ð2Ð2õ œ
Ø	�[Ð!ØØ" 1Ô%Ô+Ø# AÔ&Ô-ð	ñ ô Ðõ �JÑÔð nð nˆØ0°Ô4ˆØ2FÀrÔ2JÈ6ÐTcÐflÑTlÐKlÔ2mÐ˜"Ð.˜Ð.Ð.Ñ/Ð/àÐr%   Únum_real_text_tokensÚinput_streamÚimage_tokensÚnum_sub_sequencesc                 óR  — g }t          |¦  «        D ]”}g }||         d         }t          j        |||df         gd¬¦  «        }	|j        d         | |         d         z   }
|                     |	d|
…         ¦  «         |                     t          j        |d¬¦  «        ¦  «         Œ•|S )a  Takes an input_stream tensor of shape B x S x ?. For each subsequence, adds any required
    padding to account for images and then unpacks the subsequences to create a single sequence per item in the batch.
    Returns a list of tensors, one for each item in the batch.r   ©ÚdimN)r6   r4   ÚcatÚshapeÚappend)r;   r<   r=   r,   r>   Úall_bi_streamÚbatch_indexÚall_si_streamÚimage_adjustmentÚsubsequence_streamÚnum_real_tokenss              r&   Úconstruct_full_unpacked_streamrK   h   sÇ   € ð €Må˜ZÑ(Ô(ð 
>ð 
>ˆØˆð
 (¨Ô4°QÔ7ÐÝ"œYÐ(8¸,À{ÐTUÀ~Ô:VÐ'WÐ]^Ð_Ñ_Ô_ÐØ*Ô0°Ô3Ð6JÈ;Ô6WÐXYÔ6ZÑZˆØ×ÒÐ/Ð0@°Ð0@ÔAÑBÔBÐBØ×Ò�UœY }¸!Ð<Ñ<Ô<Ñ=Ô=Ð=Ð=àÐr%   Úpromptc                 ó  — |                       t          t          ¦  «        } |                       t          t          ¦  «        } |                       t
          t          ¦  «        } |                       t          t          ¦  «        } | S ©N)	ÚreplaceÚTEXT_REPR_POINT_OPENÚTOKEN_POINT_OPEN_STRINGÚTEXT_REPR_POINT_CLOSEÚTOKEN_POINT_CLOSE_STRINGÚTEXT_REPR_BBOX_OPENÚTOKEN_BBOX_OPEN_STRINGÚTEXT_REPR_BBOX_CLOSEÚTOKEN_BBOX_CLOSE_STRING)rL   s    r&   Ú$_replace_string_repr_with_token_tagsrX   „   s[   € Ø�^Š^Õ0Õ2IÑJÔJ€FØ�^Š^Õ1Õ3KÑLÔL€FØ�^Š^Õ/Õ1GÑHÔH€FØ�^Š^Õ0Õ2IÑJÔJ€FØ€Mr%   c                 ó�  — g }t          j        dt          › dt          › dt          › dt
          › d�	¦  «        }|                     | ¦  «        }t          |¦  «        D ]i\  }}t          |¦  «        dk    s|t          t          t          t
          fv rŒ5| 	                    ||dk    o||dz
           t          t          fv f¦  «         Œj|S )zY
    Given a string prompt, converts the prompt into a list of TextTokenConversions.
    ú(ú|ú)r   é   )
ÚreÚcompilerU   rW   rQ   rS   ÚsplitÚ	enumerater3   rD   )rL   Úprompt_text_listÚregex_patternÚprompt_splitÚiÚelems         r&   Ú+_segment_prompt_into_text_token_conversionsrg   Œ   sñ   € ð
  ÐÝ”JØtÕ"ÐtÐtÕ%<ÐtÐtÕ?VÐtÐtÕYqÐtÐtÐtñô €Mð !×&Ò& vÑ.Ô.€LÝ˜\Ñ*Ô*ð 

ð 

‰ˆˆ4Ýˆt‰9Œ9˜Š>ˆ>˜TÝ"Ý#Ý#Ý$ð	&
ð 
ð 
ð Ø×ÒØ�1�q’5Ðe˜\¨!¨a©%Ô0Õ5KÕMdÐ4eÐeÐfñ	
ô 	
ð 	
ð 	
ð Ðr%   Úscale_factorc                 ó  — t          | ¦  «        } t          | ¦  «        }g }|D ]b}|d         r-t          |d         ||¦  «        }|                     |¦  «         Œ7|                      ||d         d¬¦  «        j        ¦  «         Œc|S )aö  
    This function transforms the prompt in the following fashion:
    - <box> <point> and </box> </point> to their respective token mappings
    - extract the coordinates from the tag
    - transform the coordinates into the transformed image space
    - return the prompt tokens with the transformed coordinates and new tags

    Bounding boxes and points MUST be in the following format: <box>y1, x1, y2, x2</box> <point>x, y</point> The spaces
    and punctuation added above are NOT optional.
    r]   r   F)r   )rX   rg   Ú_transform_within_tagsÚextendÚ	input_ids)rL   rh   Ú	tokenizerrb   Útransformed_prompt_tokensrf   Úwithin_tag_tokenizeds          r&   Ú#_transform_coordinates_and_tokenizerp   ¥   s©   € õ  2°&Ñ9Ô9€Fõ CÀ6ÑJÔJÐØ+-ÐØ ð eð eˆØ�Œ7ð 	eå#9¸$¸q¼'À<ÐQZÑ#[Ô#[Ð à%×,Ò,Ð-AÑBÔBÐBÐBà%×,Ò,¨Y¨Y°t¸A´wÐSXÐ-YÑ-YÔ-YÔ-cÑdÔdÐdÐdØ$Ð$r%   Útextc                 óP  ‡— |                       d¦  «        }t          |¦  «        dk    r%‰j        t                   }‰j        t                   }n$‰j        t
                   }‰j        t                   }d„ |D ¦   «         }t          |¦  «        dk    rt          |d         |d         |¬¦  «        }n_t          |¦  «        dk    r-t          |d         |d         |d         |d         |¬	¦  «        }nt          d
t          |¦  «        › �¦  «        ‚ˆfd„|D ¦   «         }|g|z   |gz   S )z¿
    Given a bounding box of the fashion <box>1, 2, 3, 4</box> | <point>1, 2</point> This function is responsible for
    converting 1, 2, 3, 4 into tokens of 1 2 3 4 without any commas.
    ú,é   c                 óP   — g | ]#}t          |                     ¦   «         ¦  «        ‘Œ$S r$   )ÚfloatÚstrip)Ú.0Únums     r&   ú
<listcomp>z*_transform_within_tags.<locals>.<listcomp>Õ   s(   € Ð;Ð;Ð; s•�c—i’i‘k”kÑ"Ô"Ð;Ð;Ð;r%   r   r]   )ÚxÚyrh   é   r   )ÚtopÚleftÚbottomÚrightrh   zInvalid number of ints: c                 óD   •— g | ]}‰j         t          |¦  «                 ‘ŒS r$   )ÚvocabÚstr)rx   ry   rm   s     €r&   rz   z*_transform_within_tags.<locals>.<listcomp>ä   s&   ø€ ÐGÐGÐG¨CˆiŒo�c #™hœhÔ'ÐGÐGÐGr%   )
r`   r3   rƒ   rQ   rS   rU   rW   Ú scale_point_to_transformed_imageÚscale_bbox_to_transformed_imageÚ
ValueError)	rq   rh   rm   Únum_int_strsÚtoken_space_open_stringÚtoken_space_close_stringÚnum_intsÚnum_ints_translatedÚtokenss	     `      r&   rj   rj   Å   sD  ø€ ð —:’:˜c‘?”?€LÝ
ˆ<ÑÔ˜AÒÐà"+¤/Õ2IÔ"JÐØ#,¤?Õ3KÔ#LÐ Ð à"+¤/Õ2HÔ"IÐØ#,¤?Õ3JÔ#KÐ ð <Ð;¨lÐ;Ñ;Ô;€Hå
ˆ8�}„}˜ÒÐÝ>ÀÈ!ÄÐPXÐYZÔP[ÐjvÐwÑwÔwÐÐÝ	ˆX‰Œ˜!Ò	Ð	Ý=Ø˜”Ø˜!”Ø˜A”;Ø˜1”+Ø%ð
ñ 
ô 
ÐÐõ ÐCµC¸±M´MÐCÐCÑDÔDÐDàGÐGÐGÐGÐ3FÐGÑGÔG€FØ#Ð$ vÑ-Ð1IÐ0JÑJÐJr%   ÚpromptsÚscale_factorsÚmax_tokens_to_generateÚmax_position_embeddingsÚadd_BOSÚadd_beginning_of_answer_token)r*   r*   c                 ó°  ‡ ‡— |�Hg }t          ||¦  «        D ]4\  }}	|                     ˆ fd„t          ||	¦  «        D ¦   «         ¦  «         Œ5nˆ fd„|D ¦   «         }|}
|r‰ j        d         Šn‰ j        d         Šˆfd„|
D ¦   «         }
|r2‰ j        t                   }|
D ]}|d                              |¦  «         Œd„ |
D ¦   «         }t	          j        |¦  «        }t          ||z   |¦  «        }||z   |k    r%t                               d	|› d
|› �d|› d�¦  «         t          |
|¦  «        D ]f\  }}t          ||¦  «        D ]P\  }}t          |¦  «        |k    rt          d¦  «        ‚||z
  }|                     ‰ j        d         g|z  ¦  «         ŒQŒgt          j        |
t          j        ¬¦  «        }t          j        |t          j        ¬¦  «        }||fS )a"  
    Given a set of prompts and number of tokens to generate:
    - tokenize prompts
    - set the sequence length to be the max of length of prompts plus the number of tokens we would like to generate
    - pad all the sequences to this length so we can convert them into a 3D tensor.
    Nc                 ó\   •— g | ](\  }}t          ||                     ¦   «         ‰¦  «        ‘Œ)S r$   )rp   Úitem)rx   rL   rh   rm   s      €r&   rz   z:_tokenize_prompts_with_image_and_batch.<locals>.<listcomp>ý   sF   ø€ ð ð ð á,˜ õ 8¸À×@QÒ@QÑ@SÔ@SÐU^Ñ_Ô_ðð ð r%   c                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r$   )Útokenize)rx   rL   rm   s     €r&   rz   zE_tokenize_prompts_with_image_and_batch.<locals>.<listcomp>.<listcomp>  s'   ø€ Ð%ZÐ%ZÐ%ZÀV i×&8Ò&8¸Ñ&@Ô&@Ð%ZÐ%ZÐ%Zr%   r$   )rx   Ú
prompt_seqrm   s     €r&   rz   z:_tokenize_prompts_with_image_and_batch.<locals>.<listcomp>  s/   ø€ Ð$uÐ$uÐ$uÐ_iÐ%ZÐ%ZÐ%ZÐ%ZÈzÐ%ZÑ%ZÔ%ZÐ$uÐ$uÐ$ur%   z<s>z|ENDOFTEXT|c                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó   •— g | ]}‰g|z   ‘Œ	S r$   r$   )rx   r{   Ú	bos_tokens     €r&   rz   zE_tokenize_prompts_with_image_and_batch.<locals>.<listcomp>.<listcomp>  s   ø€ Ð;Ð;Ð;¨1˜	�{ Q‘Ð;Ð;Ð;r%   r$   )rx   rš   r�   s     €r&   rz   z:_tokenize_prompts_with_image_and_batch.<locals>.<listcomp>  s.   ø€ Ð]Ð]Ð]À
Ð;Ð;Ð;Ð;°
Ð;Ñ;Ô;Ð]Ð]Ð]r%   éÿÿÿÿc                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó,   — g | ]}t          |¦  «        ‘ŒS r$   ©r3   ©rx   r{   s     r&   rz   zE_tokenize_prompts_with_image_and_batch.<locals>.<listcomp>.<listcomp>  s   € Ð:Ð:Ð: !•s˜1‘v”vÐ:Ð:Ð:r%   r$   )rx   Úprompts_tokens_seqs     r&   rz   z:_tokenize_prompts_with_image_and_batch.<locals>.<listcomp>  s)   € ÐdÐdÐdÐ?QÐ:Ð:Ð'9Ð:Ñ:Ô:ÐdÐdÐdr%   z!Max subsequence prompt length of z + max tokens to generate zexceeds context length of z+. Will generate as many tokens as possible.z5Length of subsequence prompt exceeds sequence length.©r1   )ÚziprD   rƒ   ÚBEGINNING_OF_ANSWER_STRINGÚnpÚmaxÚminÚloggerÚwarningr3   r‡   rk   r4   ÚtensorÚint64)rm   rŽ   r�   r�   r‘   r’   r“   rn   rš   Úscale_factor_seqÚprompts_tokensÚbeginning_of_answerÚ	token_seqÚprompts_lengthÚmax_prompt_lenÚsamples_lengthÚprompt_tokens_seqÚprompts_length_seqÚprompt_tokensÚprompt_lengthÚpadding_sizeÚprompts_tokens_tensorÚprompts_length_tensorr�   s   `                      @r&   Ú&_tokenize_prompts_with_image_and_batchr¼   è   s„  øø€ ð" Ð Ø$&Ð!Ý,/°¸Ñ,GÔ,Gð 	ð 	Ñ(ˆJÐ(Ø%×,Ò,ðð ð ð å03°JÐ@PÑ0QÔ0Qðñ ô ñô ð ð ð	ð %vÐ$uÐ$uÐ$uÐmtÐ$uÑ$uÔ$uÐ!à.€Nàð 3Ø”O EÔ*ˆ	ˆ	à”O MÔ2ˆ	Ø]Ð]Ð]Ð]ÈnÐ]Ñ]Ô]€NØ$ð 6Ø'œoÕ.HÔIÐà'ð 	6ð 	6ˆIØ�bŒM× Ò Ð!4Ñ5Ô5Ð5Ð5ð eÐdÐUcÐdÑdÔd€Nåœ& Ñ0Ô0€Nå˜Ð*@Ñ@ÐBYÑZÔZ€NØÐ.Ñ.Ð1HÒHÐHÝ�ŠØr°ÐrÐrÐZpÐrÐrØmÐ)@ÐmÐmÐmñ	
ô 	
ð 	
õ
 25°^À^Ñ1TÔ1Tð Rð RÑ-ÐÐ-Ý,/Ð0AÐCUÑ,VÔ,Vð 	Rð 	RÑ(ˆM˜=Ý�=Ñ!Ô! NÒ2Ð2Ý Ð!XÑYÔYÐYØ)¨MÑ9ˆLØ× Ò  )¤/°-Ô"@Ð!AÀLÑ!PÑQÔQÐQÐQð		Rõ "œL¨½u¼{ÐKÑKÔKÐÝ!œL¨½u¼{ÐKÑKÔKÐà Ð"7Ð7Ð7r%   c                 ój   — t          j        | |z  ¦  «                             t           j        ¦  «        S rN   ©r§   ÚroundÚastypeÚint32)Úoriginal_coordsÚscale_hs     r&   Ú original_to_transformed_h_coordsrÄ   2  ó'   € ÝŒ8�O gÑ-Ñ.Ô.×5Ò5µb´hÑ?Ô?Ð?r%   c                 ój   — t          j        | |z  ¦  «                             t           j        ¦  «        S rN   r¾   )rÂ   Úscale_ws     r&   Ú original_to_transformed_w_coordsrÈ   7  rÅ   r%   r{   r|   c                 óº   — t          t          j        | dz  g¦  «        |¦  «        d         }t          t          j        |dz  g¦  «        |¦  «        d         }||gS ©Nrt   r   ©rÈ   r§   ÚarrayrÄ   )r{   r|   rh   Úx_scaledÚy_scaleds        r&   r…   r…   ;  sW   € Ý/µ´¸!¸a¹%¸Ñ0AÔ0AÀ<ÑPÔPÐQRÔS€HÝ/µ´¸!¸a¹%¸Ñ0AÔ0AÀ<ÑPÔPÐQRÔS€HØ�hÐÐr%   r~   r   r€   r�   c                 ón  — t          t          j        | dz  g¦  «        |¦  «        d         }t          t          j        |dz  g¦  «        |¦  «        d         }t          t          j        |dz  g¦  «        |¦  «        d         }t          t          j        |dz  g¦  «        |¦  «        d         }||||gS rÊ   rË   )	r~   r   r€   r�   rh   Ú
top_scaledÚleft_scaledÚbottom_scaledÚright_scaleds	            r&   r†   r†   A  s§   € õ 2µ"´(¸CÀ!¹G¸9Ñ2EÔ2EÀ|ÑTÔTÐUVÔW€JÝ2µ2´8¸TÀA¹X¸JÑ3GÔ3GÈÑVÔVÐWXÔY€KÝ4µR´X¸vÈ¹z¸lÑ5KÔ5KÈ\ÑZÔZÐ[\Ô]€MÝ3µB´H¸eÀa¹i¸[Ñ4IÔ4IÈ<ÑXÔXÐYZÔ[€LØ˜ ]°LÐAÐAr%   )Úvision)Úbackendsc            
       ó  ‡ — e Zd Ze	 dd„¦   «         Zˆ fd„Zedee         fd„¦   «         Z	dee
         defd„Zd	„ Ze	 	 dded
z  deee         z  ez  ez  d
z  dee         ddfd„¦   «         Zdd„Zdd„Zdd„Zed„ ¦   «         Zˆ xZS )ÚFuyuProcessorÚ c                 ót   — ddl m}  |j        |fi |¤Ž}d|j        v r|j                             d¦  «         |S )zÝ
        Override for BC. Fuyu uses TokenizersBackend and requires token_type_ids to be removed from model_input_names
        because Fuyu uses mm_token_type_ids instead for multimodal token identification.    `
        r   )ÚTokenizersBackendÚtoken_type_ids)Útokenization_utils_tokenizersrÚ   Úfrom_pretrainedÚmodel_input_namesÚremove)ÚclsÚsub_processor_typeÚpretrained_model_name_or_pathÚ	subfolderÚkwargsrÚ   rm   s          r&   Ú_load_tokenizer_from_pretrainedz-FuyuProcessor._load_tokenizer_from_pretrainedN  s`   € ð 	GÐFÐFÐFÐFÐFà5Ð%Ô5Ð6SÐ^Ð^ÐW]Ð^Ð^ˆ	à˜yÔ:Ð:Ð:ØÔ'×.Ò.Ð/?Ñ@Ô@Ð@ØÐr%   c                 óþ   •— t          ¦   «                              ||¬¦  «         || _        || _        d| _        d| _        d| _        d| _        |                     ¦   «         }|d         | _	        |d         | _
        d S )N)Úimage_processorrm   é
   i @  r   rž   z	|SPEAKER|z	|NEWLINE|)ÚsuperÚ__init__rç   rm   r�   r‘   Úpad_token_idÚdummy_image_indexÚ	get_vocabÚimage_token_idÚimage_newline_id)Úselfrç   rm   rä   rƒ   Ú	__class__s        €r&   rê   zFuyuProcessor.__init__^  s€   ø€ Ý‰Œ×Ò¨ÀIÐÑNÔNÐNØ.ˆÔØ"ˆŒØ&(ˆÔ#Ø',ˆÔ$ØˆÔØ!#ˆÔØ×#Ò#Ñ%Ô%ˆØ# KÔ0ˆÔØ % kÔ 2ˆÔÐÐr%   r/   c                 ó   — | j         | j        gS rN   )rï   rî   )rð   s    r&   Úimage_token_idszFuyuProcessor.image_token_idsj  s   € àÔ% tÔ':Ð;Ð;r%   Úmodel_inputsr   c           	      ó®  — t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }g g g g dœ}|D �] }|                     ¦   «         D �]‡\  }}|dk    rä||j        d         z
  }	t          j        t          j        |j        d         |	f| j        t          j        ¬¦  «        |gd¬¦  «        }
||                              |
¦  «         t          j        t          j	        |j        d         |	t          j        ¬¦  «        t          j
        |¦  «        gd¬¦  «        }|d	                              |¦  «         Œð|d
k    r||                              |¦  «         �Œ||j        d         z
  }t          j        t          j        |j        d         |f| j        t          j        ¬¦  «        |gd¬¦  «        }||                              |¦  «         �Œ‰�Œ¢ddg}|r|                     d	¦  «         |D ]!}t          j        ||         d¬¦  «        ||<   Œ"t          |d
         ¦  «        dk    rt          j        |d
         d¬¦  «        |d
<   |S )Nc              3   ó<   K  — | ]}|d          j         d         V — ŒdS )rl   r]   N©rC   ©rx   Úentrys     r&   ú	<genexpr>zEFuyuProcessor._left_pad_inputs_with_attention_mask.<locals>.<genexpr>o  s/   è è € Ð"YÐ"YÀ5 5¨Ô#5Ô#;¸AÔ#>Ð"YÐ"YÐ"YÐ"YÐ"YÐ"Yr%   c              3   ó<   K  — | ]}|d          j         d         V — ŒdS )Úimage_patches_indicesr]   Nr÷   rø   s     r&   rú   zEFuyuProcessor._left_pad_inputs_with_attention_mask.<locals>.<genexpr>p  s2   è è € Ð,oÐ,oÐY^¨UÐ3JÔ-KÔ-QÐRSÔ-TÐ,oÐ,oÐ,oÐ,oÐ,oÐ,or%   )rl   Úimage_patchesrü   Úattention_maskrl   r]   r   r¤   r@   rþ   rý   rü   )r¨   ÚitemsrC   r4   rB   r5   rë   ÚlongrD   ÚzerosÚ	ones_likerì   r3   )rð   rô   r   Úmax_length_input_idsÚmax_length_image_patch_indicesÚbatched_inputsrù   Úkeyr¬   Únum_padding_tokensÚpadded_input_idsrþ   Únum_padding_indicesÚpadded_indicesÚbatched_keyss                  r&   Ú$_left_pad_inputs_with_attention_maskz2FuyuProcessor._left_pad_inputs_with_attention_maskn  sµ  € Ý"Ð"YÐ"YÈLÐ"YÑ"YÔ"YÑYÔYÐÝ),Ð,oÐ,oÐbnÐ,oÑ,oÔ,oÑ)oÔ)oÐ&à')¸BÐY[ÐoqÐrÐrˆà!ð "	?ñ "	?ˆEØ$Ÿ{š{™}œ}ð !?ñ !?‘��VØ˜+Ò%Ð%Ø)=ÀÄÈQÄÑ)OÐ&Ý',¤yå!œJ¨¬°Q¬Ð9KÐ'LÈdÔN_ÕglÔgqÐrÑrÔrØ"ðð ð(ñ (ô (Ð$ð # 3Ô'×.Ò.Ð/?Ñ@Ô@Ð@å%*¤YÝœ V¤\°!¤_Ð6HÕPUÔPZÐ[Ñ[Ô[Õ]bÔ]lÐmsÑ]tÔ]tÐuØð&ñ &ô &�Nð #Ð#3Ô4×;Ò;¸NÑKÔKÐKÐKà˜OÒ+Ð+à" 3Ô'×.Ò.¨vÑ6Ô6Ð6Ñ6ð +IÈ6Ì<ÐXYÌ?Ñ*ZÐ'Ý%*¤Yå!œJØ!'¤¨a¤Ð2EÐ FÈÔH^ÕfkÔfpðñ ô ð #ð	ð ð&ñ &ô &�Nð # 3Ô'×.Ò.¨~Ñ>Ô>Ð>Ñ>ñC!?ðD $Ð%<Ð=ˆØ ð 	2Ø×ÒÐ 0Ñ1Ô1Ð1Øð 	Hð 	HˆCÝ"'¤)¨N¸3Ô,?ÀQÐ"GÑ"GÔ"GˆN˜3ÑÐõ ˆ~˜oÔ.Ñ/Ô/°1Ò4Ð4Ý.3¬i¸ÀÔ8WÐ]^Ð._Ñ._Ô._ˆN˜?Ñ+àÐr%   c           	      óâ  — t          j        ddd¦  «        }| j                             ||||||d¬¦  «        }	t	          | j        ||| j        | j        dd¬¦  «        \  }
}t          ||
|	d         d| j	        ¬¦  «        }t          |t          j
        |
d¦  «        |	d         d| j	        ¬¦  «        }t          d	„ |D ¦   «         ¦  «        }t          || j        z   | j        ¦  «        }t          |t          d
|d
         j        d
         ¦  «        ¦  «        }t          |g|dd|d
¬¦  «        }t          j        d„ |	d         D ¦   «         ¦  «        }|d
                              d
¦  «        ||dœ}|S )Nr]   T©Úimage_inputÚimage_presentÚimage_unpadded_hÚimage_unpadded_wÚimage_placeholder_idrï   Úvariable_sized)rm   rŽ   r�   r�   r‘   r’   r“   Úimage_input_ids)r;   r<   r=   r,   r>   rž   Úimage_patch_indices_per_batchc              3   ó0   K  — | ]}|j         d          V — ŒdS )rž   Nr÷   r¢   s     r&   rú   z4FuyuProcessor.get_sample_encoding.<locals>.<genexpr>Ñ  s(   è è € ÐRÐR° ¤¨¤ÐRÐRÐRÐRÐRÐRr%   r   )r(   r)   r+   r,   r-   r.   c                 ó   — g | ]
}|d          ‘ŒS )r   r$   )rx   Úimgs     r&   rz   z5FuyuProcessor.get_sample_encoding.<locals>.<listcomp>Þ  s   € Ð+aÐ+aÐ+a°s¨C°¬FÐ+aÐ+aÐ+ar%   rý   )rl   rý   rü   )r4   Úonesrç   Úpreprocess_with_tokenizer_infor¼   rm   r�   r‘   rK   Úsubsequence_lengthÚ	full_liker¨   r©   rC   r:   ÚstackÚ	unsqueeze)rð   rŽ   r�   Úimage_unpadded_heightsÚimage_unpadded_widthsr  rï   Útensor_batch_imagesr  Úmodel_image_inputr·   r²   Úimage_padded_unpacked_tokensÚ&unpacked_image_patch_indices_per_batchÚmax_prompt_lengthÚmax_seq_len_batchr9   Úimage_patch_input_indicesÚimage_patches_tensorÚbatch_encodings                       r&   Úget_sample_encodingz!FuyuProcessor.get_sample_encoding¤  sÜ  € õ œ
 1 a¨Ñ+Ô+ˆØ Ô0×OÒOØ+Ø'Ø3Ø2Ø!5Ø-Øð Pñ 
ô 
Ðõ )OØ”nØØ'Ø#'Ô#>Ø$(Ô$@ØØ*.ð)
ñ )
ô )
Ñ%ˆ�~õ (FØ!/Ø&Ø*Ð+<Ô=ØØ"Ô5ð(
ñ (
ô (
Ð$õ 2PØ!/Ýœ¨¸Ñ;Ô;Ø*Ð+JÔKØØ"Ô5ð2
ñ 2
ô 2
Ð.õ  ÐRÐRÐ5QÐRÑRÔRÑRÔRÐÝÐ 1°DÔ4OÑ OÐQUÔQmÑnÔnÐÝÐ/µ°QÐ8TÐUVÔ8WÔ8]Ð^_Ô8`Ñ1aÔ1aÑbÔbˆõ %CØ$3Ð#4Ø!GØØØ)Øð%
ñ %
ô %
Ð!õ  %œ{Ð+aÐ+aÐ>OÐP_Ô>`Ð+aÑ+aÔ+aÑbÔbÐà5°aÔ8×BÒBÀ1ÑEÔEØ1Ø%>ð
ð 
ˆð
 Ðr%   NÚimagesrq   rä   r   c                 ó:  — t          | dg¦  «         |€|€t          d¦  «        ‚ | j        t          fd| j        j        i|¤Ž}|d                              dd¦  «        }|d                              dd	¦  «        st          d
¦  «        ‚|�2|€0t           	                    d¦  «          | j        |fi |d         ¤Ž}|S |€ |�t           	                    d¦  «         dgg}|�=|�;t          |t          ¦  «        r|gg}n!t          |t          ¦  «        rd„ |D ¦   «         }d|d         d<    | j        j        |fi |d         ¤Ž}|d         }	|d         }
|d         }|d         }d| _        t!          |	¦  «        | _        g }t%          |||
||	¦  «        D ]¤\  }}}}}|                      |g|gt)          j        |g¦  «                             d¦  «        t)          j        |g¦  «                             d¦  «        | j        | j        |                     d¦  «        ¬¦  «        }|                     |¦  «         Œ¥|                      |d	¬¦  «        }|r;|                      |d         ¦  «        |d<   t)          j        |d         ¦  «        |d<   t9          |¬¦  «        S )a^  
        Returns:
            [`FuyuBatchEncoding`]: A [`FuyuBatchEncoding`] with the following fields:

            - **input_ids** -- Tensor of token ids to be fed to a model. Returned when `text` is not `None`.
            - **image_patches** -- List of Tensor of image patches. Returned when `images` is not `None`.
            - **image_patches_indices** -- Tensor of indices where patch embeddings have to be inserted by the model.
            - **attention_mask** -- List of indices specifying which tokens should be attended to by the model when
              `return_attention_mask=True`.
        r4   Nz?You have to specify either text or images. Both cannot be None.Útokenizer_init_kwargsr   r   Fr   Tz>`return_attention_mask=False` is not supported for this model.zMYou are processing a text with no associated image. Make sure it is intended.zNYou are processing an image with no associated text. Make sure it is intended.rØ   c                 ó   — g | ]}|g‘ŒS r$   r$   )rx   Útext_seqs     r&   rz   z*FuyuProcessor.__call__.<locals>.<listcomp>  s   € Ð;Ð;Ð;¨(˜H˜:Ð;Ð;Ð;r%   ÚptÚimages_kwargsÚreturn_tensorsr,  r   r!  Úimage_scale_factorsr]   r   )rŽ   r�   r   r!  r  rï   r"  )rô   r   rl   Úmm_token_type_ids)Údata)r   r‡   Ú_merge_kwargsr   rm   Úinit_kwargsÚpopÚ
setdefaultrª   r«   Ú
isinstancer„   Úlistrç   Ú
preprocessr  r3   r,   r¥   r+  r4   r¬   r  rî   rï   rD   r  Úcreate_mm_token_type_idsr   )rð   r,  rq   rä   Úoutput_kwargsr   Útext_encodingrŽ   Úimage_encodingÚbatch_imagesr   r!  r�   Úall_encodingsrL   rh   Úimage_unpadded_heightÚimage_unpadded_widthÚtensor_batch_imageÚsample_encodingr*  s                        r&   Ú__call__zFuyuProcessor.__call__æ  s0  € õ" 	˜$  	Ñ*Ô*Ð*ð ˆ<˜F˜NÝÐ^Ñ_Ô_Ð_à*˜Ô*Ýð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆð
 $1°Ô#?×#CÒ#CÐD^Ð`eÑ#fÔ#fÐ à˜]Ô+×6Ò6Ð7NÐPTÑUÔUð 	_ÝÐ]Ñ^Ô^Ð^àÐ  Ý�NŠNÐjÑkÔkÐkØ*˜DœN¨4ÐPÐP°=ÀÔ3OÐPÐPˆMØ Ð àˆ<˜FÐ.Ý�NŠNÐkÑlÔlÐlØ�t�fˆGØÐ Ð 2Ý˜$¥Ñ$Ô$ð <Ø ˜6˜(��Ý˜D¥$Ñ'Ô'ð <Ø;Ð;°dÐ;Ñ;Ô;�ð
 <@ˆ�oÔ&Ð'7Ñ8Ø8˜Ô-Ô8¸ÐbÐbÀ=ÐQ`ÔCaÐbÐbˆØ% hÔ/ˆØ!/Ð0HÔ!IÐØ .Ð/FÔ GÐØ&Ð'<Ô=ˆØ"#ˆÔÝ˜lÑ+Ô+ˆŒð ˆåehØ�]Ð$:Ð<QÐS_ñf
ô f
ð 	2ð 	2ÑaˆF�LÐ"7Ð9MÐOað #×6Ò6Ø˜Ø+˜nÝ',¤|Ð5JÐ4KÑ'LÔ'L×'VÒ'VÐWXÑ'YÔ'YÝ&+¤lÐ4HÐ3IÑ&JÔ&J×&TÒ&TÐUVÑ&WÔ&WØ%)Ô%8Ø!%Ô!6Ø$6×$@Ò$@ÀÑ$CÔ$Cð 7ñ ô ˆOð × Ò  Ñ1Ô1Ð1Ð1à×BÒBØ&¸dð Cñ 
ô 
ˆð $ð 	dØ26×2OÒ2OÐP^Ð_jÔPkÑ2lÔ2lˆNÐ.Ñ/Ý27´,¸~ÐNaÔ?bÑ2cÔ2cˆNÐ.Ñ/Ý Ð0Ñ0Ô0Ð0r%   c           
      ó4  — i }|��ˆ|                      d¦  «        p| j        j        }|d         |d         }}g }dgt          |¦  «        z  }|D �]&}	||	d         z  }
||	d         z  }t	          |
|¦  «        }t	          t          |	d         |z  ¦  «        |	d         ¦  «        }t	          t          |	d         |z  ¦  «        |	d         ¦  «        }| j                             t          j        ddd||¦  «        t          j	        ddd¦  «        t          j
        |gg¦  «        t          j
        |gg¦  «        ddd¬	¦  «        }|                     |d
         d         d         j        d         ¦  «         �Œ(|                     ||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ÚsizeÚheightÚwidthr]   r   r   Tr  r  rž   )Únum_image_tokensÚnum_image_patchesr$   )Úgetrç   rJ  r3   r©   Úintr  r4   r  r  r¬   rD   rC   Úupdater   )rð   Úimage_sizesrä   Úvision_datarJ  Úpadded_heightÚpadded_widthrM  rN  Ú
image_sizeÚheight_scale_factorÚwidth_scale_factorÚoptimal_scale_factorr  r  r#  s                   r&   Ú_get_num_multimodal_tokensz(FuyuProcessor._get_num_multimodal_tokens;  sÈ  € ð ˆØÑ"Ø—:’:˜fÑ%Ô%ÐB¨Ô)=Ô)BˆDØ*.¨x¬.¸$¸w¼-˜<ˆMà!ÐØ!" ¥c¨+Ñ&6Ô&6Ñ 6ÐØ)ð ^ñ ^�
Ø&3°jÀ´mÑ&CÐ#Ø%1°J¸q´MÑ%AÐ"Ý'*Ð+>Ð@RÑ'SÔ'SÐ$å#&¥s¨:°a¬=Ð;OÑ+OÑ'PÔ'PÐR\Ð]^ÔR_Ñ#`Ô#`Ð Ý#&¥s¨:°a¬=Ð;OÑ+OÑ'PÔ'PÐR\Ð]^ÔR_Ñ#`Ô#`Ð ð %)Ô$8×$WÒ$WÝ %¤¨A¨q°!°]ÀLÑ QÔ QÝ"'¤*¨Q°°1Ñ"5Ô"5Ý%*¤\Ð4DÐ3EÐ2FÑ%GÔ%GÝ%*¤\Ð4DÐ3EÐ2FÑ%GÔ%GØ)*Ø%&Ø#'ð %Xñ %ô %Ð!ð !×'Ò'Ð(9Ð:KÔ(LÈQÔ(OÐPQÔ(RÔ(XÐY[Ô(\Ñ]Ô]Ð]Ñ]Ø×ÒÐ4DÐ[lÐmÐmÑnÔnÐnÝÐ,Ð, Ð,Ð,Ð,r%   c                 óÖ  ‡ ‡‡	— dˆ fd„	Š	ˆ fd„Šˆˆ	ˆ fd„}ˆˆ	ˆ fd„}|€6‰ j         j        d         ‰ j         j        d         fft          |¦  «        z  }n |j        d         d	k    rt	          d
¦  «        ‚t          |¦  «        t          |¦  «        k    rt	          d¦  «        ‚g }t          ||¦  «        D ]2\  }} |||¦  «        } |||¦  «        }|                     |¦  «         Œ3|S )a¦  
        Transforms raw coordinates detected by [`FuyuForCausalLM`] to the original images' coordinate space.
        Coordinates will be returned in "box" format, with the following pattern:
            `<box>top, left, bottom, right</box>`

        Point coordinates are not supported yet.

        Args:
            outputs ([`GenerateOutput`]):
                Raw outputs from `generate`.
            target_sizes (`torch.Tensor`, *optional*):
                Tensor of shape (batch_size, 2) where each entry is the (height, width) of the corresponding image in
                the batch. If set, found coordinates in the output sequence are rescaled to the target sizes. If left
                to None, coordinates will not be rescaled.

        Returns:
            `GenerateOutput`: Same output type returned by `generate`, with output token ids replaced with
                boxed and possible rescaled coordinates.
        Nc                 ó®   •— | \  }}|€%‰j         j        d         }‰j         j        d         }n|\  }}||k    r||k    rdS t          ||z  ||z  ¦  «        S )NrK  rL  g      ð?)rç   rJ  r©   )Úoriginal_sizeÚtarget_sizerK  rL  Ú
max_heightÚ	max_widthrð   s         €r&   Úscale_factor_to_fitzGFuyuProcessor.post_process_box_coordinates.<locals>.scale_factor_to_fit{  sr   ø€ Ø)‰MˆF�EØÐ"Ø!Ô1Ô6°xÔ@�
Ø Ô0Ô5°gÔ>�	�	à(3Ñ%�
˜IØ˜	Ò!Ð! f°
Ò&:Ð&:Ø�sÝ�z FÑ*¨I¸Ñ,=Ñ>Ô>Ð>r%   c                 ó`  •— ‰j                              |¦  «        }‰j                              |¦  «        }| |k                         d¬¦  «        d         }| |k                         d¬¦  «        d         }t          j        |¦  «        r$t          j        |¦  «        r|d         |d         fS dS )NT©Úas_tupler   ©NN)rm   Úconvert_tokens_to_idsÚnonzeror4   Úany)r�   Ústart_tokenÚ	end_tokenÚstart_idÚend_idÚstarting_positionsÚending_positionsrð   s          €r&   Úfind_delimiters_pairzHFuyuProcessor.post_process_box_coordinates.<locals>.find_delimiters_pair†  s±   ø€ Ø”~×;Ò;¸KÑHÔHˆHØ”^×9Ò9¸)ÑDÔDˆFà"(¨HÒ"4×!=Ò!=ÀtÐ!=Ñ!LÔ!LÈQÔ!OÐØ &¨&Ò 0×9Ò9À4Ð9ÑHÔHÈÔKÐåŒyÐ+Ñ,Ô,ð Dµ´Ð;KÑ1LÔ1Lð DØ*¨1Ô-Ð/?ÀÔ/BÐCÐCØ�<r%   c           
      óz  •‡—  ‰| t           t          ¦  «        x}dk    �r|\  }}||dz   k    rŒ-‰j                             | |dz   |…         ¦  «        } ‰|¦  «        Šˆfd„|D ¦   «         \  }}}}	dt          › |› d|› d|› d|	› t
          › �
}
‰j                             |
¦  «        dd …         }
‰j                             |
¦  «        }
t          j	        |
¦  «         
                    | ¦  «        }
t          j        | d |…         |
| |dz   d …         gd¦  «        }  ‰| t           t          ¦  «        x}dk    �°| S )Nre  é   r]   c                 óT   •— g | ]$}d t          t          |¦  «        ‰z  ¦  «        z  ‘Œ%S ©rt   ©rP  rv   ©rx   ÚcÚscales     €r&   rz   zWFuyuProcessor.post_process_box_coordinates.<locals>.tokens_to_boxes.<locals>.<listcomp>Ÿ  s1   ø€ Ð+VÐ+VÐ+VÈ!¨AµµE¸!±H´H¸uÑ4DÑ0EÔ0EÑ,EÐ+VÐ+VÐ+Vr%   ú ú, r   )rU   rW   rm   Úconvert_ids_to_tokensrT   rV   r™   rf  r4   r¬   ÚtorB   )r�   r]  ÚpairÚstartÚendÚcoordsr~   r   r€   r�   Úreplacementrw  ro  ra  rð   s              @€€€r&   Útokens_to_boxeszCFuyuProcessor.post_process_box_coordinates.<locals>.tokens_to_boxes‘  sˆ  øø€ Ø/Ð/°Õ8NÕPgÑhÔhÐh�4ð nò ñ ð "‘
��sØ˜% !™)Ò#Ð#Øð œ×=Ò=¸fÀUÈQÁYÐQTÀ_Ô>UÑVÔV�ð ,Ð+¨MÑ:Ô:�Ø+VÐ+VÐ+VÐ+VÈvÐ+VÑ+VÔ+VÑ(��T˜6 5ð nÕ"5Ðm°sÐmÐm¸dÐmÐmÀfÐmÐmÐPUÐmÕWkÐmÐm�Ø"œn×5Ò5°kÑBÔBÀ1À2À2ÔF�Ø"œn×BÒBÀ;ÑOÔO�Ý#œl¨;Ñ7Ô7×:Ò:¸6ÑBÔB�åœ F¨6¨E¨6¤N°KÀÈÈaÉÈ	È	ÔARÐ#SÐUVÑWÔW�ð+ 0Ð/°Õ8NÕPgÑhÔhÐh�4ð nò ñ ð, ˆMr%   c                 ój  •‡	—  ‰
| t           t          ¦  «        x}dk    �r|\  }}||dz   k    rŒ-‰j                             | |dz   |…         ¦  «        } ‰|¦  «        Š	ˆ	fd„|D ¦   «         \  }}dt          › |› d|› t
          › �}‰j                             |¦  «        dd …         }‰j                             |¦  «        }t          j	        |¦  «         
                    | ¦  «        }t          j        | d |…         || |dz   d …         gd¦  «        }  ‰
| t           t          ¦  «        x}dk    �°| S )Nre  r   r]   c                 óT   •— g | ]$}d t          t          |¦  «        ‰z  ¦  «        z  ‘Œ%S rs  rt  ru  s     €r&   rz   zXFuyuProcessor.post_process_box_coordinates.<locals>.tokens_to_points.<locals>.<listcomp>¸  s1   ø€ ÐBÐBÐB°a˜�C¥ a¡¤¨5Ñ 0Ñ1Ô1Ñ1ÐBÐBÐBr%   rx  ry  r   )rQ   rS   rm   rz  rP   rR   r™   rf  r4   r¬   r{  rB   )r�   r]  r|  r}  r~  r  r{   r|   r€  rw  ro  ra  rð   s            @€€€r&   Útokens_to_pointszDFuyuProcessor.post_process_box_coordinates.<locals>.tokens_to_pointsª  sr  øø€ Ø/Ð/°Õ8OÕQiÑjÔjÐj�4ð pò ñ ð "‘
��sØ˜% !™)Ò#Ð#Øð œ×=Ò=¸fÀUÈQÁYÐQTÀ_Ô>UÑVÔV�ð ,Ð+¨MÑ:Ô:�ØBÐBÐBÐB¸6ÐBÑBÔB‘��1ð XÕ"6ÐW¸ÐWÐW¸QÐWÕ@UÐWÐW�Ø"œn×5Ò5°kÑBÔBÀ1À2À2ÔF�Ø"œn×BÒBÀ;ÑOÔO�Ý#œl¨;Ñ7Ô7×:Ò:¸6ÑBÔB�åœ F¨6¨E¨6¤N°KÀÈÈaÉÈ	È	ÔARÐ#SÐUVÑWÔW�ð+ 0Ð/°Õ8OÕQiÑjÔjÐj�4ð pò ñ ð, ˆMr%   rK  rL  r]   rt   zTEach element of target_sizes must contain the size (h, w) of each image of the batchzCMake sure that you pass in as many target sizes as output sequencesrN   )rç   rJ  r3   rC   r‡   r¥   rD   )
rð   ÚoutputsÚtarget_sizesr�  r„  ÚresultsÚseqrJ  ro  ra  s
   `       @@r&   Úpost_process_box_coordinatesz*FuyuProcessor.post_process_box_coordinatesf  sh  øøø€ ð*		?ð 		?ð 		?ð 		?ð 		?ð 		?ð		 ð 		 ð 		 ð 		 ð 		 ð	ð 	ð 	ð 	ð 	ð 	ð 	ð2	ð 	ð 	ð 	ð 	ð 	ð 	ð2 ÐØ!Ô1Ô6°xÔ@À$ÔBVÔB[Ð\cÔBdÐeÐgÕjmÐnuÑjvÔjvÑvˆLˆLØÔ Ô" aÒ'Ð'ÝÐsÑtÔtÐtåˆw‰<Œ<�3˜|Ñ,Ô,Ò,Ð,ÝÐbÑcÔcÐcàˆÝ˜W lÑ3Ô3ð 	 ð 	 ‰IˆC�Ø!�/ # tÑ,Ô,ˆCØ"Ð" 3¨Ñ-Ô-ˆCØ�NŠN˜3ÑÔÐÐàˆr%   Tc                 ó|  ‡	— | j                              t          ¦  «        Š	ˆ	fd„|D ¦   «         }t          d„ |D ¦   «         ¦  «        }t	          j        t          |¦  «        |f| j        ¦  «        }t          |¦  «        D ]-\  }}t	          j	        |¦  «        ||dt          |¦  «        …f<   Œ. | j
        |fd|i|¤ŽS )aú  
        Post-processes the output of `FuyuForConditionalGeneration` to only return the text output.

        Args:
            generated_outputs (`torch.Tensor` or `np.ndarray`):
                The output of the model. The output is expected to be a tensor of shape `(batch_size, sequence_length)`
                containing the token ids of the generated sequences.
            skip_special_tokens (`bool`, *optional*, defaults to `True`):
                Whether or not to remove special tokens in the output. Argument passed to the tokenizer's `batch_decode` method.
            **kwargs:
                Additional arguments to be passed to the tokenizer's `batch_decode method`.

        Returns:
            `list[str]`: The decoded text output.
        c                 óf   •— g | ]-}||‰k                          d ¬¦  «        d         dz   d…         ‘Œ.S )Trc  r   r]   N)rg  )rx   rˆ  r°   s     €r&   rz   zAFuyuProcessor.post_process_image_text_to_text.<locals>.<listcomp>æ  sR   ø€ ð %
ð %
ð %
ØRUˆC�Ð+Ò+×4Ò4¸dÐ4ÑCÔCÀAÔFÈÑJÐLÐLÔMð%
ð %
ð %
r%   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S rN   r¡   )rx   rˆ  s     r&   rú   z@FuyuProcessor.post_process_image_text_to_text.<locals>.<genexpr>é  s(   è è € ÐDÐD 3•c˜#‘h”hÐDÐDÐDÐDÐDÐDr%   NÚskip_special_tokens)rm   rf  r¦   r¨   r4   r5   r3   rë   ra   r¬   Úbatch_decode)
rð   Úgenerated_outputsr�  rä   Úunpadded_output_sequencesÚmax_lenÚpadded_output_sequencesre   rˆ  r°   s
            @r&   Úpost_process_image_text_to_textz-FuyuProcessor.post_process_image_text_to_textÓ  sï   ø€ ð  #œn×BÒBÕC]Ñ^Ô^Ðð%
ð %
ð %
ð %
ØYjð%
ñ %
ô %
Ð!õ ÐDÐDÐ*CÐDÑDÔDÑDÔDˆå"'¤*­cÐ2KÑ.LÔ.LÈgÐ-VÐX\ÔXiÑ"jÔ"jÐÝÐ 9Ñ:Ô:ð 	Gð 	G‰FˆAˆsÝ5:´\À#Ñ5FÔ5FÐ# A z­¨S©¬ z MÑ2Ð2à ˆtÔ Ð!8ÐlÐlÐNaÐlÐekÐlÐlÐlr%   c                 ó„   ‡— | j         j        }| j        j        }g d¢Šˆfd„|D ¦   «         }t          ||z   dgz   ¦  «        S )N)r  Ú#image_patch_indices_per_subsequencer,  r  c                 ó   •— g | ]}|‰v¯|‘Œ	S r$   r$   )rx   ÚnameÚextra_image_inputss     €r&   rz   z3FuyuProcessor.model_input_names.<locals>.<listcomp>ý  s%   ø€ Ð&vÐ&vÐ&v°ÐW[ÐcuÐWuÐWu tÐWuÐWuÐWur%   rü   )rm   rÞ   rç   r<  )rð   Útokenizer_input_namesÚimage_processor_input_namesr˜  s      @r&   rÞ   zFuyuProcessor.model_input_namesñ  sh   ø€ à $¤Ô @ÐØ&*Ô&:Ô&LÐ#ð
ð 
ð 
Ðð 'wÐ&vÐ&vÐ&vÐ8SÐ&vÑ&vÔ&vÐ#ÝÐ)Ð,GÑGÐKbÐJcÑcÑdÔdÐdr%   )rØ   re  rN   )T)r    r!   r"   Úclassmethodrå   rê   Úpropertyr<  rP  ró   ÚdictÚboolr  r+  r   r   r„   r   r   r
   r   rH  rZ  r‰  r“  rÞ   Ú__classcell__)rñ   s   @r&   r×   r×   K  s©  ø€ € € € € ð àJLðð ð ñ „[ðð
3ð 
3ð 
3ð 
3ð 
3ð ð<  c¤ð <ð <ð <ñ „Xð<ð4ÀÀdÄð 4Ðdhð 4ð 4ð 4ð 4ðl@ð @ð @ðD ð %)ØGKðR1ð R1à˜TÑ!ðR1ð �D˜”I‰o 	Ñ)Ð,=Ñ=ÀÑDðR1ð Ð,Ô-ð	R1ð
 
ðR1ð R1ð R1ñ „^ðR1ðh)-ð )-ð )-ð )-ðVkð kð kð kðZmð mð mð mð< ðeð eñ „Xðeð eð eð eð er%   r×   ):Ú__doc__r^   Útypingr   Únumpyr§   Úimage_processing_utilsr   Úimage_utilsr   Úprocessing_utilsr   r   r	   r
   Útokenization_utils_baser   r   Úutilsr   r   r   r   Úutils.import_utilsr   Ú
get_loggerr    rª   r4   rT   rV   rP   rR   rU   rW   rQ   rS   r¦   r   r<  rP  r:   rK   r„   rX   rg   rv   rp   rj   rž  Útupler¼   rÄ   rÈ   r…   r†   r×   Ú__all__r$   r%   r&   ú<module>r¬     s”  ððð ð 
€	€	€	Ø Ð Ð Ð Ð Ð à Ð Ð Ð à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð DÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ *Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð ÐÑÔð Ø€L€L€Lð Ð ØÐ Ø Ð Ø"Ð à!Ð Ø"Ð Ø"Ð Ø#Ð Ø%Ð ðð ð ð ð Ð*°%ð ñ ô ð ð$Ø  œIðà˜~Ô.ðð ðð ð	ð
 ðð ðð ðð ð ð ð>Ø  T¨#¤Y¤°Ð ?Ô@ðà ðð �t˜NÔ+Ô,ðð ð	ð
 ðð 
ˆ.Ôðð ð ð ð8°ð ¸ð ð ð ð ð¸ð Àð ð ð ð ð2%°ð %À5ð %ÐX\Ð]`ÔXað %ð %ð %ð %ð@ K ð  K°Eð  KÈÈcÌð  Kð  Kð  Kð  KðFF8à�$�s”)Œ_ðF8ð ˜˜^Ô,Ô-°Ñ4ðF8ð  ð	F8ð
 !ðF8ð ðF8ð $(ðF8ð Ð)Ô*ðF8ð F8ð F8ð F8ðT@ð @ð @ð
@ð @ð @ð ¨ð  °%ð  Àuð  ÐQUÐVYÔQZð  ð  ð  ð  ðBØ	ðBØðBØ%*ðBØ38ðBØHMðBà	ˆ#„YðBð Bð Bð Bð 
€�;ÐÑÔØðqeð qeð qeð qeð qe�Nñ qeô qeñ „ñ  Ôðqeðh Ð
€€€r%   