§
    ‚Štjös  ã            	       óx  — d Z ddlZddl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mZ ddlmZ ddlmZmZ dd	lmZ eeeef                  eeeeeef                  z  eeeeef                           z  eeeeeef                           z  Zeedz  eedz  eedz  eedz           z           z           z           Z G d
„ de	d¬¦  «        Z G d„ ded¬¦  «        Z G d„ de
d¬¦  «        Ze G d„ de¦  «        ¦   «         Zdeeeeef         dedeeef         fd„Zdededefd„Z d„ Z!d„ Z"d„ Z#d d„Z$dgZ%dS )!zProcessor class for KOSMOS-2.é    Né   )ÚBatchFeature)Ú
ImageInput)ÚImagesKwargsÚProcessingKwargsÚProcessorMixinÚ
TextKwargsÚUnpack)Ú
AddedToken)ÚBatchEncodingÚ	TextInput)Úauto_docstringc                   ó>   — e Zd ZU dZedz  ed<   eed<   edz  ed<   dS )ÚKosmos2ImagesKwargsa¯  
    bboxes (`Union[list[tuple[int]], list[tuple[float]], list[list[tuple[int]]], list[list[tuple[float]]]]`, *optional*):
        The bounding bboxes associated to `texts`.
    num_image_tokens (`int`, *optional* defaults to 64):
        The number of (consecutive) places that are used to mark the placeholders to store image information.
        This should be the same as `latent_query_num` in the instance of `Kosmos2Config` you are using.
    first_image_token_id (`int`, *optional*):
        The token id that will be used for the first place of the subsequence that is reserved to store image
        information. If unset, will default to `self.tokenizer.unk_token_id + 1`.
    NÚbboxesÚnum_image_tokensÚfirst_image_token_id)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
NestedListÚ__annotations__Úint© ó    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/kosmos2/processing_kosmos2.pyr   r   '   sK   € € € € € € ð	ð 	ð ˜ÑÐÐÑØÐÐÑØ ™*Ð$Ð$Ñ$Ð$Ð$r   r   F)Útotalc                   ó   — e Zd ZU dZeed<   dS )ÚKosmos2TextKwargsz“
    add_eos_token (`bool`, defaults to `False`):
    Whether or not to include `EOS` token id in the encoding when `add_special_tokens=True`.
    Úadd_eos_tokenN)r   r   r   r   Úboolr   r   r   r   r    r    8   s*   € € € € € € ðð ð
 ÐÐÑÐÐr   r    c            
       óF   — e Zd ZU eed<   eed<   ddddddddddœ	ddid	œZd
S )ÚKosmos2ProcessorKwargsÚtext_kwargsÚimages_kwargsTFr   )	Úadd_special_tokensÚpaddingÚstrideÚreturn_overflowing_tokensÚreturn_special_tokens_maskÚreturn_offsets_mappingÚreturn_token_type_idsÚverboser!   r   é@   )r%   r&   N)r   r   r   r    r   r   Ú	_defaultsr   r   r   r$   r$   A   sg   € € € € € € Ø"Ð"Ð"Ñ"Ø&Ð&Ð&Ñ&ð #'ØØØ).Ø*/Ø&+Ø%*ØØ"ð

ð 

ð  ð
ðð €I€I€Ir   r$   c                   óŒ  ‡ — e Zd Zdˆ fd„	Ze	 	 ddedz  deee         z  dee	         de
fd„¦   «         Zd	„ Zd
„ Z	 	 	 ddeee         z  dedz  dededz  deee         z  f
d„Zdd„Zdd„Zed„ ¦   «         Zdedeee                  eee                  z  defd„Zdeeef         eeeeef         z  deeef         fd„Zˆ xZS )ÚKosmos2Processoré   c                 ód  •— d|_         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d	| _        d
| _	        d| _
        d| _        | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        g| _        || _        d„ t          | j        ¦  «        D ¦   «         }g }| j        |z   D ](}|                     t!          |ddd¬¦  «        ¦  «         Œ)|                     |¦  «         t%          ¦   «                              ||¦  «         dS )zŽ
        num_patch_index_tokens (`int`, *optional*, defaults to 1024):
            The number of tokens that represent patch indices.
        Fz</doc>z<image>z</image>z</chunk>z</line>z<phrase>z	</phrase>z<object>z	</object>ú</delimiter_of_multi_objects/>z<grounding>c                 óZ   — g | ](}d t          |¦  «                             d¦  «        › d�‘Œ)S )ú<patch_index_é   ú>)ÚstrÚzfill©Ú.0Úxs     r   ú
<listcomp>z-Kosmos2Processor.__init__.<locals>.<listcomp>€   s4   € ÐmÐmÐmÀQÐ@­c°!©f¬f¯lªl¸1©o¬oÐ@Ð@Ð@ÐmÐmÐmr   T)ÚlstripÚrstripÚ
normalizedN)r-   Ú	eod_tokenÚ	boi_tokenÚ	eoi_tokenÚ	eoc_tokenÚ	eol_tokenÚ	bop_tokenÚ	eop_tokenÚ	boo_tokenÚ	eoo_tokenÚ	dom_tokenÚ	grd_tokenÚ
tag_tokensÚnum_patch_index_tokensÚrangeÚappendr   Ú
add_tokensÚsuperÚ__init__)	ÚselfÚimage_processorÚ	tokenizerrO   ÚkwargsÚpatch_index_tokensÚtokens_to_addÚtokenÚ	__class__s	           €r   rT   zKosmos2Processor.__init__X   sA  ø€ ð
 +0ˆ	Ô'à!ˆŒà"ˆŒØ#ˆŒà#ˆŒØ"ˆŒà#ˆŒØ$ˆŒà#ˆŒØ$ˆŒà9ˆŒà&ˆŒð ŒNØŒNØŒNØŒNØŒNØŒNØŒNØŒNØŒNØŒNØŒNð
ˆŒð '=ˆÔ#ØmÐmÍ%ÐPTÔPkÑJlÔJlÐmÑmÔmÐàˆØ”_Ð'9Ñ9ð 	að 	aˆEØ× Ò ¥¨E¸$ÀuÐY^Ð!_Ñ!_Ô!_Ñ`Ô`Ð`Ð`Ø×Ò˜]Ñ+Ô+Ð+å‰Œ×Ò˜¨)Ñ4Ô4Ð4Ð4Ð4r   NÚimagesÚtextrX   Úreturnc                 ó€	  ‡ ‡— |€|€t          d¦  «        ‚ ‰ j        t          fd‰ j        j        i|¤Ž}|d                              dd ¦  «        }|d                              dd¦  «        }|d                              dd ¦  «        }|d                              d	d
¦  «        }|d         d         }	|d         d         }
|d                              dd ¦  «        }t          ¦   «         }|�) ‰ j        |fi |d         ¤Ž}| 	                    |¦  «         |�Ç‰  
                    ||||¬¦  «        }|	rK|sIt          |t          ¦  «        r‰ j        j        › |› �}n#t          |t          ¦  «        rˆ fd„|D ¦   «         }|d         d         o||d         d<   |€|
nd
|d         d<   |€|nd |d         d<    ‰ j        d#d|i|d         ¤Ž}| 	                    |¦  «         |	|d         d<   |
|d         d<   ||d         d<   |��»|��¸|€‰ j        j        dz   }|	}t!          |¦  «        dz   }t          t#          |||z   ¦  «        ¦  «        }dgdg|z  z   dgz   }g }g }|d         }t          |t          ¦  «        r|g}|d         g|d<   |D ]‰}|d |…         |z   |||z   d …         z   }|                     |¦  «         t'          j        |¦  «        }|rdg|z   }|dgt)          |¦  «        t)          |¦  «        z
  z  z  }|                     |¦  «         ŒŠt          |t          ¦  «        �r-t+          d„ t-          |j        ¦  «        D ¦   «         d„ ¬¦  «        }|d         \  }}|d         \  }}|d         d         o||d         d<   d |d         d<    ‰ j        d#d||         gi|d         ¤Ž}t)          |j        d         ¦  «        Š|‰k    r‰‰ j        j        dk    r5ˆˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆfd„|d         D ¦   «         |d<   nD‰ j        j        dk    r4ˆˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆfd „|d         D ¦   «         |d<   t          |t          ¦  «        r#|€!|d         }|d         d         |d<   |d         }| 	                    t3          ||d         |d!œ|¬"¦  «        ¦  «         |S )$Nz*You have to specify either images or text.Útokenizer_init_kwargsr&   r   r   r/   r   r%   r!   Fr'   r(   Úreturn_tensors)r   c                 ó0   •— g | ]}‰j         j        › |› �‘ŒS r   )rW   Ú	bos_token)r=   ÚsrU   s     €r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>¯   s)   ø€ ÐKÐKÐKÀ˜tœ~Ô7Ð<¸Ð<Ð<ÐKÐKÐKr   r^   é   r   Ú	input_idsÚattention_maskc                 ó6   — g | ]\  }}|t          |¦  «        f‘ŒS r   ©Úlen)r=   Úidxr>   s      r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>ä   s&   € ÐTÐTÐT¡v s¨A�c�3˜q™6œ6�]ÐTÐTÐTr   c                 ó   — | d         S ©Néÿÿÿÿr   )r>   s    r   ú<lambda>z+Kosmos2Processor.__call__.<locals>.<lambda>ä   s   € ÐdeÐfhÔdi€ r   )Úkeyro   Úrightc                 óV   •— g | ]%}|‰j         j        g‰t          |¦  «        z
  z  z   ‘Œ&S r   ©rW   Úpad_token_idrk   ©r=   r>   Úmax_len_paddedrU   s     €€r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>ò   s;   ø€ Ð$vÐ$vÐ$vÐgh Q¨$¬.Ô*EÐ)FÈ.Õ[^Ð_`Ñ[aÔ[aÑJaÑ)bÑ%bÐ$vÐ$vÐ$vr   c                 óB   •— g | ]}|d g‰t          |¦  «        z
  z  z   ‘ŒS ©r   rj   ©r=   r>   rw   s     €r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>ó   ó=   ø€ ð 6ð 6ð 6ØDE˜A   ~½¸A¹¼Ñ'>Ñ ?Ñ?ð6ð 6ð 6r   c                 óB   •— g | ]}|d g‰t          |¦  «        z
  z  z   ‘ŒS ry   rj   rz   s     €r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>ö   r{   r   Úleftc                 óV   •— g | ]%}‰j         j        g‰t          |¦  «        z
  z  |z   ‘Œ&S r   rt   rv   s     €€r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>ú   s<   ø€ Ð$vÐ$vÐ$vÐgh d¤nÔ&AÐ%BÀnÕWZÐ[\ÑW]ÔW]ÑF]Ñ%^ÐabÑ%bÐ$vÐ$vÐ$vr   c                 óB   •— g | ]}d g‰t          |¦  «        z
  z  |z   ‘ŒS ry   rj   rz   s     €r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>û   ó=   ø€ ð 6ð 6ð 6ØDE˜Q˜C >µC¸±F´FÑ#:Ñ;¸aÑ?ð6ð 6ð 6r   c                 óB   •— g | ]}d g‰t          |¦  «        z
  z  |z   ‘ŒS ry   rj   rz   s     €r   r?   z-Kosmos2Processor.__call__.<locals>.<listcomp>þ   r€   r   )rg   rh   Úimage_embeds_position_mask)ÚdataÚtensor_typer   )Ú
ValueErrorÚ_merge_kwargsr$   rW   Úinit_kwargsÚpopÚ
setdefaultr   rV   ÚupdateÚpreprocess_examplesÚ
isinstancer:   rd   ÚlistÚunk_token_idr   rP   rQ   Úcopyrk   ÚsortedÚ	enumeraterg   Úpadding_sider   )rU   r]   r^   rX   Úoutput_kwargsr   r   r   r!   r'   r(   rb   ÚencodingÚimage_encodingÚtext_encodingÚwith_bosÚstart_indexÚimage_token_idsÚbase_image_embeds_position_maskrg   r‚   Úall_input_idsÚtext_idsÚmaskÚsorted_lengthÚ_Úmin_len_not_paddedrl   rw   s   `                           @r   Ú__call__zKosmos2Processor.__call__‰   sx  øø€ ð ˆ>˜d˜lÝÐIÑJÔJÐJà*˜Ô*Ý"ð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆð ˜Ô/×3Ò3°H¸dÑCÔCˆØ(¨Ô9×=Ò=Ð>PÐRTÑUÔUÐØ,¨_Ô=×AÒAÐBXÐZ^Ñ_Ô_ÐØ% mÔ4×8Ò8¸È%ÑPÔPˆà*¨=Ô9Ð:NÔOÐØ Ô.¨yÔ9ˆØ& }Ô5×@Ò@ÐAQÐSWÑXÔXˆå‘>”>ˆàÐØ1˜TÔ1°&Ð[Ð[¸MÈ/Ô<ZÐ[Ð[ˆNØ�OŠO˜NÑ+Ô+Ð+àÐØ×+Ò+¨D°&¸&ÐScÐ+ÑdÔdˆDà!ð L¨-ð LÝ˜d¥CÑ(Ô(ð LØ"œnÔ6Ð>¸Ð>Ð>�D�DÝ ¥dÑ+Ô+ð LØKÐKÐKÐKÀdÐKÑKÔK�Dà˜mÔ,Ð-AÔBÐTÀ}ð ˜-Ô(Ð)=Ñ>ð BHÀ°g°gÐUZˆM˜-Ô(¨Ñ3ØOUÈ~¸^¸^ÐcgˆM˜-Ô(Ð)9Ñ:Ø*˜DœNÐUÐU°ÐU¸ÀmÔ8TÐUÐUˆMØ�OŠO˜MÑ*Ô*Ð*à=Oˆ�mÔ$Ð%9Ñ:Ø29ˆ�mÔ$ YÑ/Ø9Gˆ�mÔ$Ð%5Ñ6àÑ Ñ 2à#Ð+Ø'+¤~Ô'BÀQÑ'FÐ$ð *ˆHõ ˜h™-œ-¨!Ñ+ˆKõ #¥5Ð)=Ð?SÐVfÑ?fÑ#gÔ#gÑhÔhˆOØ/0¨c°Q°CÐ:JÑ4JÑ.JÈaÈSÑ.PÐ+ð ˆIØ)+Ð&Ø$ [Ô1ˆMå˜$¥Ñ$Ô$ð JØ!. �Ø.6Ð7GÔ.HÐ-I�Ð)Ñ*Ø)ð 8ð 8�à# L [ LÔ1°OÑCÀhÈ{Ð]mÑOmÐOoÐOoÔFpÑp�Ø× Ò  Ñ*Ô*Ð*å”yÐ!@ÑAÔA�Øð &à˜3 ™:�Dà˜˜�s 8™}œ}­s°4©y¬yÑ8Ñ9Ñ9�Ø*×1Ò1°$Ñ7Ô7Ð7Ð7å˜$¥Ñ%Ô%ñ Ý &ØTÐTµ¸=Ô;RÑ1SÔ1SÐTÑTÔTÐZiÐZið!ñ !ô !�ð )6°aÔ(8Ñ%�Ð%Ø& rÔ*‘��Qà! -Ô0Ð1EÔFÐXÈ=ð ˜mÔ,Ð-AÑBð BF�˜mÔ,Ð-=Ñ>à . ¤Ð `Ð `°T¸#´Y°KÐ `À=ÐQ^ÔC_Ð `Ð `�Ý!$ ]Ô%<¸QÔ%?Ñ!@Ô!@�à%¨Ò7Ð7Ø”~Ô2°gÒ=Ð=Ø$vÐ$vÐ$vÐ$vÐ$vÐluÐ$vÑ$vÔ$v˜	ð6ð 6ð 6ð 6ØIcð6ñ 6ô 6Ð2ð6ð 6ð 6ð 6ØIQÐRbÔIcð6ñ 6ô 6˜Ð!1Ñ2Ð2ð œÔ4¸Ò>Ð>Ø$vÐ$vÐ$vÐ$vÐ$vÐluÐ$vÑ$vÔ$v˜	ð6ð 6ð 6ð 6ØIcð6ñ 6ô 6Ð2ð6ð 6ð 6ð 6ØIQÐRbÔIcð6ñ 6ô 6˜Ð!1Ñ2õ
 ˜$¥Ñ$Ô$ð K¨Ð)?Ø% aœL�	Ø-5Ð6FÔ-GÈÔ-J�Ð)Ñ*Ø-GÈÔ-JÐ*ð �OŠOÝà%.Ø*2Ð3CÔ*DØ6Pðð ð
 !/ðñ ô ñ	ô 	ð 	ð ˆr   c                 ó˜  — |€dS t          |t          ¦  «        st          d¦  «        ‚|D ]ž}|€Œt          |t          ¦  «        s|g}|D ]~}t          |t          ¦  «        rXt	          |¦  «        dk    rt          d„ |D ¦   «         ¦  «        s;t	          |¦  «        dk    rt          d„ |D ¦   «         ¦  «        st          d¦  «        ‚ŒŒŸdS )aÚ  
        Check `bboxes` for a single text example. It could be
            - `None`: no bounding box associated to a text.
            - A list with each element being the bounding boxes associated to one `<phrase> ... </phrase>` pair found
              in a text. This could be:
                  - `None`: no bounding box associated to a `<phrase> ... </phrase>` pair.
                  - A tuple of 2 integers: A single bounding box specified by patch indices.
                  - A tuple of 4 float point number: A single bounding box specified by (normalized) coordinates.
                  - A list containing the above 2 tuple types: Multiple bounding boxes for a
                   `<phrase> ... </phrase>` pair.
        Nz@`bboxes` (for a single text example) should be `None` or a list.é   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S ©N)rŒ   r   r<   s     r   ú	<genexpr>zAKosmos2Processor._check_bboxes_for_single_text.<locals>.<genexpr>/  s,   è è € Ð.SÐ.SÀa­z¸!½SÑ/AÔ/AÐ.SÐ.SÐ.SÐ.SÐ.SÐ.Sr   r8   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r¥   )rŒ   Úfloatr<   s     r   r¦   zAKosmos2Processor._check_bboxes_for_single_text.<locals>.<genexpr>0  s,   è è € Ð1XÐ1XÈ1µ*¸QÅÑ2FÔ2FÐ1XÐ1XÐ1XÐ1XÐ1XÐ1Xr   a'  Each element in `bboxes` (for a single text example) should be either `None`, a tuple containing 2 integers or 4 float point numbers, or a list containing such tuples. Also make sure the arguments `texts` and `bboxes` passed to `preprocess_text` are both in batches or both for a single example.)rŒ   r�   r…   Útuplerk   Úall)rU   r   ÚbboxÚelements       r   Ú_check_bboxes_for_single_textz.Kosmos2Processor._check_bboxes_for_single_text  s  € ð ˆ>ØˆFÝ˜F¥DÑ)Ô)ð 	aÝÐ_Ñ`Ô`Ð`ð ð 	ð 	ˆDØˆ|ØÝ ¥dÑ+Ô+ð Ø�v�Øð 
ð 
�Ý! '­5Ñ1Ô1ð 	Ý˜‘\”\ QÒ&Ð&­3Ð.SÐ.SÈ7Ð.SÑ.SÔ.SÑ+SÔ+SÐ&Ý˜G™œ¨Ò)Ð)­cÐ1XÐ1XÐPWÐ1XÑ1XÔ1XÑ.XÔ.XÐ)å$ð@ñô ð øð
ð	ð 	r   c                 ól   — |                      ¦   «         }|�|› d|› �}|                      ||¦  «        }|S )Nú )ÚstripÚ_insert_patch_index_tokens)rU   r^   Úimager   Úimg_info_tokenss        r   Ú_preprocess_single_examplez+Kosmos2Processor._preprocess_single_example9  sD   € Ø�zŠz‰|Œ|ˆØÐà%Ð.Ð.¨Ð.Ð.ˆDð ×.Ò.¨t°VÑ<Ô<ˆØˆr   r/   Útextsr   r   c                 óp  ‡ ‡	— ‰ j         g|z  }d                     ‰ j         g|z   ‰ j        gz   ¦  «        Š	d}t          |t          ¦  «        rd}|g}|€dgt          |¦  «        z  }nt          |t          ¦  «        s|g}t          |¦  «        t          |¦  «        k    r0t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚|s‰                      |¦  «         |g}nT|�?t          |t          ¦  «        st          d¦  «        ‚|D ]}‰                      |¦  «         Œndgt          |¦  «        z  }t          |¦  «        t          |¦  «        k    r0t          d	t          |¦  «        › dt          |¦  «        › d�¦  «        ‚ˆ	ˆ fd
„t          |||¦  «        D ¦   «         }|s|d         }|S )a-  Add image and bounding box information to `texts` as image and patch index tokens.

        Args:
            texts (`Union[TextInput, list[TextInput]]`): The texts to be processed.
            images (`ImageInput`, *optional*): The images associated to `texts`.
            bboxes (`Union[list[tuple[int]], list[tuple[float]], list[list[tuple[int]]], list[list[tuple[float]]]]`, *optional*):
                The bounding bboxes associated to `texts`.
            num_image_tokens (`int`, *optional*, defaults to 64):
                The number of image tokens (used as latent queries). This should corresponds to the `latent_query_num`
                attribute in `Kosmos2Config`.

        Returns:
            `Union[TextInput, list[TextInput]]`: The processed texts with image and patch index tokens.
        r¯   TFNzGThe number of examples in `texts` and `images` should be the same. Got ú v.s. ú	 instead.zS`bboxes` should be `None` or a list (as a batch) when `texts` is passed as a batch.zGThe number of examples in `texts` and `bboxes` should be the same. Got c                 óH   •— g | ]\  }}}‰                      |||‰¦  «        ‘ŒS r   )r´   )r=   r^   r²   r«   r³   rU   s       €€r   r?   z8Kosmos2Processor.preprocess_examples.<locals>.<listcomp>{  sC   ø€ ð 
ð 
ð 
á!��e˜Tð ×+Ò+¨D°%¸¸ÑOÔOð
ð 
ð 
r   r   )
rD   ÚjoinrE   rŒ   r:   rk   r�   r…   r­   Úzip)
rU   rµ   r]   r   r   Ú
img_tokensÚbatchedr>   Úresultr³   s
   `        @r   r‹   z$Kosmos2Processor.preprocess_examplesC  s;  øø€ ð, ”nÐ%Ð(8Ñ8ˆ
ØŸ(š( D¤NÐ#3°jÑ#@ÀDÄNÐCSÑ#SÑTÔTˆð ˆÝ�e�SÑ!Ô!ð 	ØˆGØ�GˆEàˆ>Ø�V�c %™jœjÑ(ˆFˆFÝ˜F¥DÑ)Ô)ð 	Ø�XˆFÝˆu‰:Œ:�˜V™œÒ$Ð$Ýð CÕZ]Ð^cÑZdÔZdð  Cð  CÕloÐpvÑlwÔlwð  Cð  Cð  Cñô ð ð ð 		)Ø×.Ò.¨vÑ6Ô6Ð6Ø�XˆFˆFØÐÝ˜f¥dÑ+Ô+ð xÝ Ð!vÑwÔwÐwØð 6ð 6�Ø×2Ò2°1Ñ5Ô5Ð5Ð5ð6ð �V�c %™jœjÑ(ˆFåˆv‰;Œ;�#˜e™*œ*Ò$Ð$Ýð CÕZ]Ð^cÑZdÔZdð  Cð  CÕloÐpvÑlwÔlwð  Cð  Cð  Cñô ð ð
ð 
ð 
ð 
ð 
å%(¨°¸Ñ%?Ô%?ð
ñ 
ô 
ˆð
 ð 	Ø˜A”YˆFàˆr   Tc                 óh   — |                      | j        ¦  «        d         }|rt          |¦  «        S |S rn   )ÚsplitrE   Ú+clean_text_and_extract_entities_with_bboxes)rU   r^   Úcleanup_and_extractÚcaptions       r   Úpost_process_generationz(Kosmos2Processor.post_process_generation…  s6   € Ø—*’*˜Tœ^Ñ,Ô,¨RÔ0ˆØð 	HÝ>¸wÑGÔGÐGØˆr   c                 ó@   ‡ —  ‰ j         |fd|i|¤Ž}ˆ fd„|D ¦   «         S )aÈ  
        Post-process the output of the model to decode the text.

        Args:
            generated_outputs (`torch.Tensor` or `np.ndarray`):
                The output of the model `generate` function. The output is expected to be a tensor of shape `(batch_size, sequence_length)`
                or `(sequence_length,)`.
            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.
        Úskip_special_tokensc                 ó>   •— g | ]}‰                      |d ¬¦  «        ‘ŒS )F)rÂ   )rÄ   )r=   r^   rU   s     €r   r?   zDKosmos2Processor.post_process_image_text_to_text.<locals>.<listcomp>œ  s-   ø€ ÐjÐjÐjÐRV�×,Ò,¨TÀuÐ,ÑMÔMÐjÐjÐjr   )Úbatch_decode)rU   Úgenerated_outputsrÆ   rX   Úgenerated_textss   `    r   Úpost_process_image_text_to_textz0Kosmos2Processor.post_process_image_text_to_text‹  sB   ø€ ð  ,˜$Ô+Ð,=ÐqÐqÐSfÐqÐjpÐqÐqˆØjÐjÐjÐjÐZiÐjÑjÔjÐjr   c                 óD   — | j         j        }| j        j        }||z   dgz   S )Nr‚   )rW   Úmodel_input_namesrV   )rU   Útokenizer_input_namesÚimage_processor_input_namess      r   rÍ   z"Kosmos2Processor.model_input_namesž  s.   € à $¤Ô @ÐØ&*Ô&:Ô&LÐ#Ø$Ð'BÑBÐFbÐEcÑcÐcr   c                 óÀ  — |�t          |¦  «        dk    r|S t          t          j        d|¬¦  «        ¦  «        }t          |¦  «        t          |¦  «        k    r0t	          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚d}g }t          ||¦  «        D ]ù\  }}|                     ¦   «         \  }}	|                     |||	…         ¦  «         |	}|€Œ>t          |t          ¦  «        r|g}g }
t          d„ |D ¦   «         ¦  «        st	          d¦  «        ‚|D ]4}|                      |¦  «        \  }}|
                     |› d	|› �¦  «         Œ5t          |
¦  «        dk    rŒËd
                     |
¦  «        }|                     d|› d�¦  «         Œú|t          |¦  «        k     r|                     ||d …         ¦  «         d                     |¦  «        }|S )Nr   z<phrase>.+?</phrase>)ÚstringzuThe number of elements in `bboxes` should be the same as the number of `<phrase> ... </phrase>` pairs in `text`. Got r·   r¸   c              3   ó   K  — | ]}|d uV — Œ	d S r¥   r   )r=   Úboxs     r   r¦   z>Kosmos2Processor._insert_patch_index_tokens.<locals>.<genexpr>¾  s&   è è € Ð7Ð7¨3�s $�Ð7Ð7Ð7Ð7Ð7Ð7r   zTThe multiple bounding boxes for a single phrase should not contain any `None` value.r¯   z  </delimiter_of_multi_objects/> z	<object> z
 </object>Ú )rk   r�   ÚreÚfinditerr…   r»   ÚspanrQ   rŒ   r©   rª   Ú#_convert_bbox_to_patch_index_tokensrº   )rU   r^   r   Úmatched_phrasesÚcurr_posÚbufferÚmatchedr«   rŸ   ÚendÚpatch_index_stringsrÓ   Úpatch_index_1Úpatch_index_2Úposition_strs                  r   r±   z+Kosmos2Processor._insert_patch_index_tokens¤  sS  € Øˆ>�S ™[œ[¨AÒ-Ð-ØˆKå�rœ{Ð+BÈ4ÐPÑPÔPÑQÔQˆÝˆÑÔ¥3 v¡;¤;Ò.Ð.Ýð {õ  ILð  M\ñ  I]ô  I]ð  {ð  {õ  ehð  ioñ  epô  epð  {ð  {ð  {ñô ð ð ˆØˆÝ  °&Ñ9Ô9ð 	@ð 	@‰MˆG�TØ—\’\‘^”^‰FˆAˆsØ�MŠM˜$˜x¨˜|Ô,Ñ-Ô-Ð-ØˆHàˆ|Øå˜$¥Ñ&Ô&ð Ø�v�Ø"$ÐåÐ7Ð7°$Ð7Ñ7Ô7Ñ7Ô7ð Ý Øjñô ð ð ð Oð O�Ø/3×/WÒ/WÐX[Ñ/\Ô/\Ñ,�˜}Ø#×*Ò*¨mÐ+MÐ+M¸mÐ+MÐ+MÑNÔNÐNÐNåÐ&Ñ'Ô'¨1Ò,Ð,ØØ=×BÒBÐCVÑWÔWˆLØ�MŠMÐ> lÐ>Ð>Ð>Ñ?Ô?Ð?Ð?à•c˜$‘i”iÒÐØ�MŠM˜$˜x˜y˜yœ/Ñ*Ô*Ð*à�wŠw�v‰ŒˆØˆr   r«   c                 óF  — t          |¦  «        dk    r|\  }}n9t          t          j        | j        ¦  «        ¦  «        }t          ||¦  «        \  }}dt          |¦  «                             d¦  «        › d�}dt          |¦  «                             d¦  «        › d�}||fS )Nr£   r7   r8   r9   )rk   r   ÚmathÚsqrtrO   Úcoordinate_to_patch_indexr:   r;   )rU   r«   Úidx_1Úidx_2Únum_patches_per_sideÚtoken_1Útoken_2s          r   rØ   z4Kosmos2Processor._convert_bbox_to_patch_index_tokensÑ  s¢   € õ ˆt‰9Œ9˜Š>ˆ>Ø‰LˆE�5�5õ $'¥t¤y°Ô1LÑ'MÔ'MÑ#NÔ#NÐ Ý4°TÐ;OÑPÔP‰LˆE�5à8¥# e¡*¤*×"2Ò"2°1Ñ"5Ô"5Ð8Ð8Ð8ˆØ8¥# e¡*¤*×"2Ò"2°1Ñ"5Ô"5Ð8Ð8Ð8ˆà˜ÐÐr   )r3   )NN)NNr/   )T)r   r   r   rT   r   r   r   r�   r
   r$   r   r¡   r­   r´   Ú	BboxInputr   r:   r‹   rÄ   rË   ÚpropertyrÍ   r©   r¨   r±   rØ   Ú__classcell__)r\   s   @r   r2   r2   V   s  ø€ € € € € ð/5ð /5ð /5ð /5ð /5ð /5ðb ð %)Ø,0ðJð Jà˜TÑ!ðJð ˜$˜yœ/Ñ)ðJð Ð/Ô0ð	Jð
 
ðJð Jð Jñ „^ðJðX!ð !ð !ðFð ð ð %)Ø Ø')ð@ð @à˜4 	œ?Ñ*ð@ð ˜TÑ!ð@ð ð	@ð
  ™*ð@ð 
ˆt�CŒy‰ð@ð @ð @ð @ðDð ð ð ðkð kð kð kð& ðdð dñ „Xðdð
+¨sð +¸DÀÀsÄÔ<LÈtÐTYÐZ_ÔT`ÔOaÑ<að +Ðfið +ð +ð +ð +ðZ Ø˜#˜s˜(”O e¨E°5¸%ÀÐ,FÔ&GÑGð à	ˆs�CˆxŒð ð  ð  ð  ð  ð  ð  ð  r   r2   r«   rè   r_   c                 ó2  — | \  }}}}||k    r||k    st          d¦  «        ‚t          j        ||z  ¦  «        }t          j        ||z  ¦  «        }t          j        ||z  dz
  ¦  «        }t          j        ||z  dz
  ¦  «        }	||z  |z   }
|	|z  |z   }|
|fS )a  Convert a bounding box to a pair of patch indices.

    Args:
        bbox (`tuple[float, float, float, float]`):
            The 4 coordinates of the bounding box, with the format being (x1, y1, x2, y2) specifying the upper-left and
            lower-right corners of the box. It should have x2 > x1 and y2 > y1.
        num_patches_per_side (`int`): the number of patches along each side.

    Returns:
        `tuple[int, int]`: A pair of patch indices representing the upper-left patch and lower-right patch.
    zTThe coordinates in `bbox` should be `(x1, y1, x2, y2)` with `x2 > x1` and `y2 > y1`.rf   )r…   rã   ÚfloorÚceil)r«   rè   Úx1Úy1Úx2Úy2Úul_xÚul_yÚlr_xÚlr_yÚul_idxÚlr_idxs               r   rå   rå   ã  sº   € ð Ñ€RˆˆR�à�ŠGˆG˜˜Rš˜ÝÐoÑpÔpÐpåŒ:�bÐ/Ñ/Ñ0Ô0€DÝŒ:�bÐ/Ñ/Ñ0Ô0€DåŒ9�RÐ.Ñ.°Ñ2Ñ3Ô3€DÝŒ9�RÐ.Ñ.°Ñ2Ñ3Ô3€DàÐ(Ñ(¨4Ñ/€FØÐ(Ñ(¨4Ñ/€Fà�6ˆ>Ðr   rù   rú   c                 ó(  — d|z  }| |z  }| |z  }||z  }||z  }| |k    r||z  }||z  }	||z  |z   }
||z  |z   }nS||k    s||k    r||z  }||z  }	||z  |z   }
||z  |z   }n,||z  |dz  z   }||z  |dz  z   }	||z  |dz  z   }
||z  |dz  z   }||	|
|fS )a�  
    Given a grid of length `num_patches_per_side` and the indices of the upper-left and lower-right corners of a
    bounding box, returns the normalized coordinates of the bounding box, in the form (x1, y1, x2, y2).

    Args:
        ul_idx (`int`): the index of the grid cell that corresponds to the upper-left corner of the bounding box.
        lr_idx (`int`): the index of the grid cell that corresponds to the lower-right corner of the bounding box.
        num_patches_per_side (`int`): the number of patches along each side.

    Returns:
        `tuple[float]`: the normalized coordinates of the bounding box, in the form (x1, y1, x2, y2).
    g      ð?r£   r   )rù   rú   rè   Ú	cell_sizerõ   rö   r÷   rø   rñ   rò   ró   rô   s               r   Úpatch_index_to_coordinaterý     s  € ð Ð*Ñ*€Ið Ð(Ñ(€DØÐ)Ñ)€DàÐ(Ñ(€DØÐ)Ñ)€Dð �ÒÐØ�IÑˆØ�IÑˆØ�IÑ 	Ñ)ˆØ�IÑ 	Ñ)ˆˆØ	�Šˆ˜ š˜Ø�IÑˆØ�IÑˆØ�IÑ 	Ñ)ˆØ�IÑ 	Ñ)ˆˆà�IÑ 	¨A¡Ñ-ˆØ�IÑ 	¨A¡Ñ-ˆØ�IÑ 	¨A¡Ñ-ˆØ�IÑ 	¨A¡Ñ-ˆàˆr�2�rˆ>Ðr   c           
      ó¸  — d}t          j        || ¦  «        }g }|D �]¼}|                     d¦  «        }|                     ¦   «         \  }}}|s8d}|                     d¦  «        d         |                     d¦  «        d         f}|                     d¦  «        }	g }
|	D ]é}t          j        d|¦  «        }t          j        d|dd…         ¦  «        }|r³|r±|rX|
                     t          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        f¦  «         Œ’|
                     t          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        f¦  «         Œê|r|                     |||
f¦  «         �Œ‰|
D ]0}d|d         › d	|d         › d
�}|                     |||gf¦  «         Œ1�Œ¾|S )aÞ  Extract entities contained in `text`. The bounding bboxes is given in the form of patch indices.

    This function is only intended to be used within `clean_text_and_extract_entities_with_bboxes` where further
    processing happens, including converting to normalized coordinates and whitespace character cleaning up.

    Examples:

    ```python
    >>> text = "<grounding> An image of<phrase> a snowman</phrase><object><patch_index_0044><patch_index_0863></object> warming himself by<phrase> a fire</phrase><object><patch_index_0005><patch_index_0911></object>."
    >>> entities = extract_entities_with_patch_indices(text)
    >>> entities
    [(' a snowman', (31, 41), [(44, 863)]), (' a fire', (130, 137), [(5, 911)])]
    ```z™(?:(<phrase>([^<]+)</phrase>))?<object>((?:<patch_index_\d+><patch_index_\d+></delimiter_of_multi_objects/>)*<patch_index_\d+><patch_index_\d+>)</object>r£   Nr   r5   z<patch_index_(\d+)>rf   r7   z><patch_index_r9   )	rÕ   rÖ   r×   ÚgroupsrÀ   ÚsearchrQ   r   Úgroup)r^   ÚpatternÚmatchesÚentities_with_patch_indicesÚmatchr×   Ú
phrase_tagÚphraseÚmatch_contentÚpatch_index_pairsÚentity_bboxesÚpairr>   Úyr«   Úentitys                   r   Ú#extract_entities_with_patch_indicesr  /  sý  € ð k€Gõ Œk˜' 4Ñ(Ô(€Gð #%Ðàð Kñ Kˆà�zŠz˜!‰}Œ}ˆØ,1¯LªL©N¬NÑ)ˆ
�F˜MØð 	8ØˆFà—J’J˜q‘M”M !Ô$ e§j¢j°¡m¤m°AÔ&6Ð7ˆDð *×/Ò/Ð0PÑQÔQÐàˆØ%ð 		Mð 		MˆDå”	Ð0°$Ñ7Ô7ˆAÝ”	Ð0°$°q°r°r´(Ñ;Ô;ˆAàð M�Qð MØð MØ!×(Ò(­#¨a¯gªg°a©j¬j©/¬/½3¸q¿wºwÀq¹z¼z¹?¼?Ð)KÑLÔLÐLÐLà!×(Ò(­#¨a¯gªg°a©j¬j©/¬/½3¸q¿wºwÀq¹z¼z¹?¼?Ð)KÑLÔLÐLøàð 	KØ'×.Ò.°¸¸mÐ/LÑMÔMÐMÑMà%ð Kð K�àJ¨¨a¬ÐJÐJÀÀQÄÐJÐJÐJ�Ø+×2Ò2°F¸DÀ4À&Ð3IÑJÔJÐJÐJñKð
 'Ð&r   c           	      óÎ   — | \  }\  }}t          t          j        dd|d|…         ¦  «        ¦  «        }t          t          j        dd|d|…         ¦  «        ¦  «        }|||ff}|S )zfAdjust the positions of the entities in `text` to be relative to the text with special fields removed.ú<.*?>rÔ   N)rk   rÕ   Úsub)r  r^   Úentity_nameÚstartrÝ   Úadjusted_startÚadjusted_endÚadjusted_entitys           r   Úadjust_entity_positionsr  i  sk   € à &Ñ€K‘�%˜å�œ ¨¨T°&°5°&¬\Ñ:Ô:Ñ;Ô;€NÝ•r”v˜g r¨4°°°¬:Ñ6Ô6Ñ7Ô7€LØ" ^°\Ð$BÐC€OØÐr   c                 óð  — |                       ¦   «         }t          | ¦  «        t          |                      ¦   «         ¦  «        z
  }g }|D ]©\  }\  }}}t          |¦  «        t          |                     ¦   «         ¦  «        z
  }	t          |¦  «        t          |                     ¦   «         ¦  «        z
  }
||z
  |	z   }||z
  |
z
  }|                      ¦   «         }|                     |||f|f¦  «         Œª||fS )z9Remove the spaces around the text and the entities in it.)r°   rk   r@   rA   rQ   )r^   ÚentitiesÚnew_textÚleading_spacesÚnew_entitiesr  r  rÝ   r   Úentity_name_leading_spacesÚentity_name_trailing_spacess              r   Ú_cleanup_spacesr  s  sü   € à�zŠz‰|Œ|€HÝ˜‘Y”Y¥ T§[¢[¡]¤]Ñ!3Ô!3Ñ3€Nà€LØ-5ð Að AÑ)ˆ‘\�e˜S 6Ý%(¨Ñ%5Ô%5½¸K×<NÒ<NÑ<PÔ<PÑ8QÔ8QÑ%QÐ"Ý&)¨+Ñ&6Ô&6½¸[×=OÒ=OÑ=QÔ=QÑ9RÔ9RÑ&RÐ#à˜Ñ&Ð)CÑCˆØ�NÑ"Ð%@Ñ@ˆØ!×'Ò'Ñ)Ô)ˆà×Ò˜[¨5°#¨,¸Ð?Ñ@Ô@Ð@Ð@à�\Ð!Ð!r   é    c                 ó  ‡— t          j        dd| ¦  «        }t          | ¦  «        }g }|D ]K}|dd…         |d         }}t          || ¦  «        }ˆfd„|D ¦   «         }	|                     ||	fz   ¦  «         ŒLt          ||¦  «        S )a�  Remove the tag tokens from `text`, extract entities in it with some cleaning up of white characters.

    Examples:

    ```python
    >>> text = "<grounding> An image of<phrase> a snowman</phrase><object><patch_index_0044><patch_index_0863></object> warming himself by<phrase> a fire</phrase><object><patch_index_0005><patch_index_0911></object>."
    >>> clean_text, entities = clean_text_and_extract_entities_with_bboxes(text)
    >>> clean_text
    'An image of a snowman warming himself by a fire.'

    >>> entities
    [('a snowman', (12, 21), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('a fire', (41, 47), [(0.171875, 0.015625, 0.484375, 0.890625)])]
    ```r  rÔ   r   r£   c                 óJ   •— g | ]}t          |d          |d         ‰¦  «        ‘Œ S )r   rf   )rý   )r=   r«   rè   s     €r   r?   z?clean_text_and_extract_entities_with_bboxes.<locals>.<listcomp>ž  s0   ø€ ÐqÐqÐqÐbfÕ5°d¸1´g¸tÀA¼wÐH\Ñ]Ô]ÐqÐqÐqr   )rÕ   r  r  r  rQ   r  )
r^   rè   Úprocessed_textr  r  Úitemr  r   r  Úbboxes_in_coordss
    `        r   rÁ   rÁ   ˆ  s§   ø€ õ ”V˜G R¨Ñ.Ô.€Nå"EÀdÑ"KÔ"KÐØ€HØ+ð ?ð ?ˆØ˜a ˜cœ D¨¤G�ˆÝ1°&¸$Ñ?Ô?ˆØqÐqÐqÐqÐjpÐqÑqÔqÐà�Š˜Ð+;Ð*=Ñ=Ñ>Ô>Ð>Ð>å˜>¨8Ñ4Ô4Ð4r   )r   )&r   r�   rã   rÕ   Úimage_processing_utilsr   Úimage_utilsr   Úprocessing_utilsr   r   r   r	   r
   Útokenization_pythonr   Útokenization_utils_baser   r   Úutilsr   r�   r©   r   r¨   rë   r   r   r    r$   r2   rå   rý   r  r  r  rÁ   Ú__all__r   r   r   ú<module>r-     së  ðð $Ð #à €€€Ø €€€Ø 	€	€	€	à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø %Ð %Ð %Ð %Ð %Ð %Ø bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bØ -Ð -Ð -Ð -Ð -Ð -Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø #Ð #Ð #Ð #Ð #Ð #ð 	ˆˆs�CˆxŒÔØ
ˆ5�˜˜u eÐ+Ô,Ô-ñ.à
ˆ4��c˜3�h”Ô Ô!ñ"ð ˆ4��e˜U EÐ)Ô*Ô+Ô,ñ-ð 
ð �%˜$‘,  e¨d¡l°T¸%À$¹,ÈÈeÐVZÉlÔI[Ñ:[Ô5\Ñ&\Ô!]Ñ]Ô^€
ð%ð %ð %ð %ð %˜,¨eð %ñ %ô %ð %ð"ð ð ð ð ˜
¨%ð ñ ô ð ðð ð ð ð Ð-°Uð ñ ô ð ð* ðI ð I ð I ð I ð I �~ñ I ô I ñ „ðI ðX E¨%°¸¸uÐ*DÔ$Eð Ð]`ð ÐejÐknÐpsÐksÔetð ð ð ð ð>( cð (°3ð (Ècð (ð (ð (ð (ðZ7'ð 7'ð 7'ðtð ð ð"ð "ð "ð*5ð 5ð 5ð 5ð: Ð
€€€r   