§
    ‚Štjs`  ã                   ó$  — d dl Z d dlmZ d dlmZmZmZ d dlZ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mZ dd	lmZ dd
lmZ erddlmZ  G d„ ded¬¦  «        Z ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         ZdgZdS )é    N)Ú
accumulate)ÚTYPE_CHECKINGÚOptionalÚUnioné   )ÚBatchFeature)Ú
ImageInputÚis_valid_image)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)Ú
AddedTokenÚBatchEncodingÚ	TextInput)Úauto_docstring)Úrequires)ÚPreTokenizedInputc                   ó*   — e Zd ZddiddddœddidœZd	S )
ÚColModernVBertProcessorKwargsÚpaddingÚlongestTÚchannels_first)Úreturn_row_col_infoÚdata_formatÚdo_convert_rgbÚreturn_tensorsÚpt)Útext_kwargsÚimages_kwargsÚcommon_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úz/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/colmodernvbert/processing_colmodernvbert.pyr   r   (   sE   € € € € € ð �yð
ð $(Ø+Ø"ð
ð 
ð
 +¨DÐ1ð
ð 
€I€I€Ir'   r   F)Útotal)Útorch)Úbackendsc                   óÊ  ‡ — e Zd ZeZ	 	 	 	 	 d#dededz  dedz  fˆ fd„Ze	 	 	 d$de	e
e	         z  e
e
e	                  z  deed	e
e         e
d	         f         dedz  d
ee         def
d„¦   «         Z	 	 d%de	dz  deed	e
e         e
d	         f         d
ee         fd„Z	 	 d%de	dz  deed	e
e         e
d	         f         d
ee         fˆ fd„Zdededefd„Zde
de
e         de
e
e                  fd„Zd&d„Z	 d&de	dz  d
ee         defd„Zdee
e         z  d
ee         defd„Z	 	 	 d'dede
d         f         dede
d         f         deded         d ed!ef         ddfd"„Zˆ xZS )(ÚColModernVBertProcessorNé@   Úimage_seq_lenÚvisual_prompt_prefixÚquery_prefixc                 ó  •‡— d}t          ddd¬¦  «        j        | _        t          ddd¬¦  «        j        | _        t          ddd¬¦  «        j        | _        d| _        || _        ‰                     | j        ¦  «        | _        ‰                     | j        ¦  «        | _	        ‰                     | j        ¦  «        | _
        ˆfd	„t          d
¦  «        D ¦   «         | _        t          j        d¦  «        | _        d| j        | j        | j        gi}‰                     |¦  «         ‰                     | j        ¦  «        | _         t#          ¦   «         j        |‰fd|i|¤Ž |p
d| j        › d�| _        |pd| _        | j        | _        dS )a‚  
        image_seq_len (`int`, *optional*, defaults to 64):
            The length of the image sequence i.e. the number of <image> tokens per image in the input.
        visual_prompt_prefix (`str`, *optional*):
            A string that gets tokenized and prepended to the image tokens.
        query_prefix (`str`, *optional*):
            A prefix to be used for the query.
        Nz<fake_token_around_image>FT)Ú
normalizedÚspecialz<image>z<end_of_utterance>z<global-img>c           
      óx   •— g | ]6}t          d ¦  «        D ]$}‰                     d|dz   › d|dz   › d�¦  «        ‘Œ%Œ7S )é   ú<row_é   Ú_col_ú>)ÚrangeÚconvert_tokens_to_ids)Ú.0ÚiÚjÚ	tokenizers      €r(   ú
<listcomp>z4ColModernVBertProcessor.__init__.<locals>.<listcomp>V   sn   ø€ ð 
ð 
ð 
ØNOÕejÐklÑemÔemð
ð 
Ø`aˆI×+Ò+Ð,H°A¸±EÐ,HÐ,HÀÀAÁÐ,HÐ,HÐ,HÑIÔIð
ð 
ð 
ð 
r'   r6   z*(\n?<global-img>\n?|<row_\d+_col_\d+>\n?)+Úadditional_special_tokensÚchat_templatez<|begin_of_text|>User:z0Describe the image.<end_of_utterance>
Assistant:Ú )r   ÚcontentÚfake_image_tokenÚimage_tokenÚend_of_utterance_tokenÚglobal_image_tagr/   r<   Úimage_token_idÚfake_image_token_idÚglobal_image_token_idr;   Úrow_col_idsÚreÚcompileÚ%_regex_to_remove_extra_special_tokensÚadd_special_tokensÚsuperÚ__init__r0   r1   Úquery_augmentation_token)
ÚselfÚimage_processorr@   rC   r/   r0   r1   ÚkwargsÚtokens_to_addÚ	__class__s
     `      €r(   rS   z ColModernVBertProcessor.__init__;   s½  øø€ ð$ ˆÝ *Ð+FÐSXÐbfÐ gÑ gÔ gÔ oˆÔÝ% i¸EÈ4ÐPÑPÔPÔXˆÔÝ&0Ð1EÐRWÐaeÐ&fÑ&fÔ&fÔ&nˆÔ#Ø .ˆÔØ*ˆÔØ'×=Ò=¸dÔ>NÑOÔOˆÔØ#,×#BÒ#BÀ4ÔCXÑ#YÔ#YˆÔ Ø%.×%DÒ%DÀTÔEZÑ%[Ô%[ˆÔ"ð
ð 
ð 
ð 
ÝSXÐYZÑS[ÔS[ð
ñ 
ô 
ˆÔõ 68´ZÐ@mÑ5nÔ5nˆÔ2ð (ØÔ%ØÔ ØÔ+ð*ð
ˆð 	×$Ò$ ]Ñ3Ô3Ð3Ø'×=Ò=¸dÔ>NÑOÔOˆÔà�‰ŒÔ˜¨)Ð[Ð[À=Ð[ÐTZÐ[Ð[Ð[à$8ð %
Øh TÔ%5ÐhÐhÐhð 	Ô!ð )Ð.¨BˆÔØ(,Ô(CˆÔ%Ð%Ð%r'   ÚimagesÚtextr   rW   Úreturnc                 ó$  —  | j         d||dœ|¤Ž\  }} | j        d||dœ|¤Ž  | j        t          fd| j        j        i|¤Ž}|�|n| j        }|d                              dd¦  «        }|d                              dd¦  «        }|d                              dd¦  «        }i x}	}
|��= | j        |fi |d	         ¤Ž\  }	}|	                     d
d¦  «         |	                     dd¦  «         |�÷|  	                    ||¬¦  «        \  }} | j        |fi |d         ¤Ž}
|r||
d<   g }t          |¦  «        D ]v\  }}g }|D ]W}|d         \  }}|
                     ||¦  «        }|
                     ||dz
  ¦  «        }|                     ||z
  dz   ¦  «         ŒX|                     |¦  «         Œw|r|                      |
d         |¦  «        |
d<   |                      ||
dg¬¦  «         n|� | j        dd|i|d         ¤Ž}
t          i |
¥|	¥|¬¦  «        S )a  
        image_seq_len (`int`, *optional*):
            The length of the image sequence. If not provided, the default value of self.image_seq_len is used.
            image_seq_len should be equal to int(((image_size // patch_size) ** 2) / (scale_factor**2))
        )rZ   r[   Útokenizer_init_kwargsNr   Úreturn_text_replacement_offsetsFÚreturn_mm_token_type_idsr   r    ÚrowsÚcols)Úimages_replacementsÚtext_replacement_offsetsÚnew_spanr8   Ú	input_idsÚmm_token_type_idsÚimage)Ú
modalitiesr[   )ÚdataÚtensor_typer&   )Úprepare_inputs_layoutÚvalidate_inputsÚ_merge_kwargsr   r@   Úinit_kwargsr/   ÚpopÚ_process_imagesÚget_text_with_replacementsÚ	enumerateÚchar_to_tokenÚappendÚcreate_mm_token_type_idsÚ_check_special_mm_tokensr   )rU   rZ   r[   r/   rW   Úoutput_kwargsr_   r`   r   Úimage_inputsÚtext_inputsrc   rd   Úbatch_image_seq_lengthsÚbatch_idÚtext_replacement_offsetÚimage_seq_lensrj   ÚstartÚendÚstart_id_posÚ
end_id_poss                         r(   Ú__call__z ColModernVBertProcessor.__call__p   sê  € ð 2�tÔ1ÐU¸ÀdÐUÐUÈfÐUÐU‰ˆ�ØˆÔÐ@ F°Ð@Ð@¸Ð@Ð@Ð@à*˜Ô*Ý)ð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆð *7Ð)B˜˜ÈÔHZˆØ*7¸Ô*F×*JÒ*JÐKlÐnsÑ*tÔ*tÐ'Ø#0°Ô#?×#CÒ#CÐD^Ð`eÑ#fÔ#fÐ Ø& }Ô5×9Ò9Ð:JÈDÑQÔQˆà%'Ð'ˆ�{ØÑØ0D°Ô0DÀVÐ0nÐ0nÈ}Ð]lÔOmÐ0nÐ0nÑ-ˆLÐ-ð ×Ò˜V TÑ*Ô*Ð*Ø×Ò˜V TÑ*Ô*Ð*àÐØ15×1PÒ1PØÐ.Að 2Qñ 2ô 2Ñ.�Ð.ð -˜dœn¨TÐRÐR°]À=Ô5QÐRÐR�Ø2ð WØ>V�KÐ :Ñ;à*,Ð'Ý9BÐC[Ñ9\Ô9\ð Cð CÑ5�HÐ5Ø%'�NØ 7ð Mð M˜Ø%)¨*Ô%5™
˜˜sØ'2×'@Ò'@ÀÈ5Ñ'QÔ'Q˜Ø%0×%>Ò%>¸xÈÈqÉÑ%QÔ%Q˜
à&×-Ò-¨j¸<Ñ.GÈ!Ñ.KÑLÔLÐLÐLØ+×2Ò2°>ÑBÔBÐBÐBà+ð Ø7;×7TÒ7TØ# KÔ0Ð2Iñ8ô 8�KÐ 3Ñ4ð ×-Ò-¨d°KÈWÈIÐ-ÑVÔVÐVøàÐØ(˜$œ.ÐSÐS¨dÐS°mÀMÔ6RÐSÐSˆKåÐ!@ KÐ!@°<Ð!@ÈnÐ]Ñ]Ô]Ð]r'   c                 óH  ‡ ‡‡— |�,t          |t          ¦  «        r|g}|                     ¦   «         }‰�ì‰ j                             ‰¦  «        Št          ‰¦  «        r‰ggŠn¾t          ‰t          t          f¦  «        r¢t          ‰d         ¦  «        r�|�ˆˆ fd„|D ¦   «         }dgt          t          |¦  «        ¦  «        z   Šˆˆfd„t          t          |¦  «        ¦  «        D ¦   «         }t          ‰¦  «        ‰d         k    r|‰‰d         d …         gz   Šn|Šn‰gŠ‰|fS )Nr   c                 óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS r&   ©ÚcountrG   ©r=   ÚsamplerU   s     €r(   rA   zAColModernVBertProcessor.prepare_inputs_layout.<locals>.<listcomp>Ã   s(   ø€ Ð'ZÐ'ZÐ'ZÈ6¨¯ª°TÔ5EÑ(FÔ(FÐ'ZÐ'ZÐ'Zr'   c                 óB   •— g | ]}‰‰|         ‰|d z            …         ‘ŒS )r8   r&   )r=   r>   Úcumsum_images_in_textrZ   s     €€r(   rA   zAColModernVBertProcessor.prepare_inputs_layout.<locals>.<listcomp>Å   sF   ø€ ð $ð $ð $àð Ð4°QÔ7Ð:OÐPQÐTUÑPUÔ:VÐVÔWð$ð $ð $r'   éÿÿÿÿ)Ú
isinstanceÚstrÚcopyrV   Úfetch_imagesr
   ÚlistÚtupler   r;   Úlen)rU   rZ   r[   rW   Ún_images_in_textÚsplit_imagesr‹   s   ``    @r(   rl   z-ColModernVBertProcessor.prepare_inputs_layout±   sa  øøø€ ð ÐÝ˜$¥Ñ$Ô$ð Ø�v�Ø—9’9‘;”;ˆDàÐØÔ)×6Ò6°vÑ>Ô>ˆFÝ˜fÑ%Ô%ð &Ø!˜(˜��Ý˜F¥T­5 MÑ2Ô2ð &µ~ÀfÈQÄiÑ7PÔ7Pð &ØÐ#à'ZÐ'ZÐ'ZÐ'ZÐUYÐ'ZÑ'ZÔ'ZÐ$Ø-.¨Cµ$µzÐBRÑ7SÔ7SÑ2TÔ2TÑ,TÐ)ð$ð $ð $ð $ð $å!&¥sÐ+;Ñ'<Ô'<Ñ!=Ô!=ð$ñ $ô $�Lõ
 ˜6‘{”{Ð%:¸2Ô%>Ò>Ð>Ø!-°Ð8MÈbÔ8QÐ8SÐ8SÔ1TÐ0UÑ!U˜˜à!-˜˜à$˜X�Fà�tˆ|Ðr'   c                 óx  •‡ —  t          ¦   «         j        ||fi |¤Ž |€|€t          d¦  «        ‚|�ƒˆ fd„|D ¦   «         }|�:d„ |D ¦   «         }||k    r&t          d‰ j        › d|› d‰ j        › d|› d�	¦  «        ‚d S |€9t	          |¦  «        r,t          d	t          |¦  «        › d‰ j        › d
�¦  «        ‚d S d S d S )Nz+You must provide either `text` or `images`.c                 óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS r&   r†   rˆ   s     €r(   rA   z;ColModernVBertProcessor.validate_inputs.<locals>.<listcomp>ß   s(   ø€ ÐRÐRÐRÀ6 §¢¨TÔ-=Ñ >Ô >ÐRÐRÐRr'   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r&   )r“   )r=   Úsublists     r(   rA   z;ColModernVBertProcessor.validate_inputs.<locals>.<listcomp>á   s   € Ð%IÐ%IÐ%I°w¥c¨'¡l¤lÐ%IÐ%IÐ%Ir'   zThe total number of zP tokens in the prompts should be the same as the number of images passed. Found ú z tokens and z images per sample.zFound z. tokens in the text but no images were passed.)rR   rm   Ú
ValueErrorrG   ÚanyÚsum)rU   rZ   r[   rW   r”   Ún_images_in_imagesrY   s   `     €r(   rm   z'ColModernVBertProcessor.validate_inputsÓ   sG  øø€ ð 	 �‰ŒÔ ¨Ð7Ð7°Ð7Ð7Ð7àˆ<˜F˜NÝÐJÑKÔKÐKàÐØRÐRÐRÐRÈTÐRÑRÔRÐØÐ!Ø%IÐ%IÀ&Ð%IÑ%IÔ%IÐ"Ø#Ð'9Ò9Ð9Ý$ð{¨tÔ/?ð {ð {Ø"2ð{ð {Ø59Ô5Eð{ð {ØSeð{ð {ð {ñô ð ð :Ð9ð
 �¥CÐ(8Ñ$9Ô$9�Ý Øu�SÐ!1Ñ2Ô2ÐuÐu°TÔ5EÐuÐuÐuñô ð ð Ðð  ���r'   ry   Ú	image_idxc           	      óâ  — d„ |d         D ¦   «         |         }d„ |d         D ¦   «         |         }|dk    r1|dk    r+| j         › | j        › z   | j        › | j        z  z   | j         › z   S d}t	          |¦  «        D ]E}t	          |¦  «        D ].}|| j         › d|dz   › d	|dz   › d
�z   | j        › | j        z  z   z  }Œ/|dz  }ŒF|d| j         › �| j        › z   | j        › | j        z  z   | j         › z   z  }|S )Nc                 ó   — g | ]	}|D ]}|‘ŒŒ
S r&   r&   )r=   Úrow_listÚrows      r(   rA   z?ColModernVBertProcessor.replace_image_token.<locals>.<listcomp>í   ó%   € ÐSÐSÐS˜hÈ(ÐSÐSÀ3�cÐSÐSÐSÐSr'   ra   c                 ó   — g | ]	}|D ]}|‘ŒŒ
S r&   r&   )r=   Úcol_listÚcols      r(   rA   z?ColModernVBertProcessor.replace_image_token.<locals>.<listcomp>î   r¤   r'   rb   r   rD   r7   r8   r9   r:   ú
)rF   rI   rG   r/   r;   )rU   ry   rŸ   Ú
image_rowsÚ
image_colsÚtext_split_imagesÚn_hÚn_ws           r(   Úreplace_image_tokenz+ColModernVBertProcessor.replace_image_tokenì   s}  € ØSÐS¨,°vÔ*>ÐSÑSÔSÐT]Ô^ˆ
ØSÐS¨,°vÔ*>ÐSÑSÔSÐT]Ô^ˆ
Ø˜Š?ˆ?˜z¨Qš˜àÔ(Ð*ØÔ*Ð,ñ-àÔ%Ð'¨$Ô*<Ñ<ñ=ð Ô*Ð,ñ-ðð !#ÐÝ˜ZÑ(Ô(ð *ð *�Ý  Ñ,Ô,ð ð �CØ%ØÔ0Ð2Ø: #¨¡'Ð:Ð:°°a±Ð:Ð:Ð:ñ;à!Ô-Ð/°$Ô2DÑDñEñÐ%Ð%ð
 " TÑ)Ð!Ð!àØ,�TÔ*Ð,Ð,ØÔ*Ð,ñ-àÔ%Ð'¨$Ô*<Ñ<ñ=ð Ô*Ð,ñ-ñÐð %Ð$r'   rf   r{   c                 ó®  — g }t          |¦  «        D ]Â\  }}t          j        ||         ¦  «        }t          j        |¦  «        }t          j        || j        k    ¦  «        d         }d}	|D ]@}
|	t          |¦  «        k    r n*||	         }||
z   }d|||…<   t          j        ||¦  «        }	ŒA|                     | 	                    ¦   «         ¦  «         ŒÃ|S )Nr   r8   )
rs   ÚnpÚarrayÚ
zeros_likeÚwhererK   r“   Úsearchsortedru   Útolist)rU   rf   r{   rg   r>   Úseq_lengthsÚ	array_idsÚmm_token_typesÚimage_start_positionsr?   Úseq_lenr   r€   s                r(   rv   z0ColModernVBertProcessor.create_mm_token_type_ids	  só   € ð ÐÝ'Ð(?Ñ@Ô@ð 	>ð 	>‰NˆAˆ{Ýœ ¨1¤Ñ.Ô.ˆIÝœ]¨9Ñ5Ô5ˆNÝ$&¤H¨Y¸$Ô:RÒ-RÑ$SÔ$SÐTUÔ$VÐ!ØˆAØ&ð @ð @�Ø�Ð1Ñ2Ô2Ò2Ð2Ø�EØ-¨aÔ0�Ø˜g‘o�Ø,-�˜u S˜yÑ)Ý”OÐ$9¸3Ñ?Ô?��Ø×$Ò$ ^×%:Ò%:Ñ%<Ô%<Ñ=Ô=Ð=Ð=à Ð r'   c                 ó  ‡ ‡— i }|�ït           j                             di ¦  «        Š‰                     |¦  «         ˆˆ fd„|D ¦   «         }‰ j        dz   }‰ j        dz   }t          ‰                      dd¬¦  «        d	         ¦  «        d
z
  }g }g }	|D ]K\  }
}}||z  d
z   }|dk    r|nd}|                     ||z   ||z  z   ¦  «         |	                     |
¦  «         ŒL|                     ||	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.
        Nr    c                 ó8   •— g | ]} ‰j         j        g |¢‰‘R Ž ‘ŒS r&   )rV   Úget_number_of_image_patches)r=   Ú
image_sizer    rU   s     €€r(   rA   zFColModernVBertProcessor._get_num_multimodal_tokens.<locals>.<listcomp>0  sE   ø€ ð "ð "ð "àð A�Ô$Ô@Ð\À*Ð\ÈmÐ\Ð\Ð\ð"ð "ð "r'   r   é   z

F)rQ   rf   r8   r   )Únum_image_tokensÚnum_image_patchesr&   )	r   r%   ÚgetÚupdater/   r“   r@   ru   r   )rU   Úimage_sizesrW   Úvision_dataÚnum_image_row_colsÚbase_image_lengthÚ
col_lengthÚextra_split_newlinerÀ   rÁ   Únum_patchesÚnum_rowsÚnum_colsÚ
row_lengthÚsplit_extrar    s   `              @r(   Ú_get_num_multimodal_tokensz2ColModernVBertProcessor._get_num_multimodal_tokens  sh  øø€ ð ˆØÐ"Ý9ÔC×GÒGÈÐY[Ñ\Ô\ˆMØ× Ò  Ñ(Ô(Ð(ð"ð "ð "ð "ð "à"-ð"ñ "ô "Ðð
 !%Ô 2°QÑ 6ÐØÔ+¨aÑ/ˆJõ
 #& d§n¢n°VÐPU nÑ&VÔ&VÐWbÔ&cÑ"dÔ"dÐghÑ"hÐØ!ÐØ "Ðà3Eð 6ð 6Ñ/�˜X xØ'¨(Ñ2°QÑ6�
Ø5=À²\°\Ð1Ð1Àq�Ø ×'Ò'Ð(9¸KÑ(GÈ:ÐX`ÑK`Ñ(aÑbÔbÐbØ!×(Ò(¨Ñ5Ô5Ð5Ð5à×ÒÐ4DÐ[lÐmÐmÑnÔnÐnåÐ,Ð, Ð,Ð,Ð,r'   c                 óÀ  —  | j         t          fd| j        j        i|¤Ž}|d                              dd¦  «        }|du}t          |¦  «        r|g}n…t          |t          ¦  «        rt          |d         ¦  «        rnZt          |t          ¦  «        r6t          |d         t          ¦  «        rt          |d         d         ¦  «        st          d¦  «        ‚d„ |D ¦   «         }|  	                    | j
        gt          |¦  «        z  ||d         |d         ¬	¦  «        }|r=|d
                              |d         dk    d¦  «        }|                     d|i¦  «         |S )a  
        Prepare for the model one or several image(s). Handles input validation, RGB conversion,
        and prepends the `visual_prompt_prefix` to each image. Optionally computes labels from
        `token_type_ids` when a `suffix` is provided in `text_kwargs`.

        Args:
            images (`PIL.Image.Image`, `np.ndarray`, `torch.Tensor`, `list[PIL.Image.Image]`, `list[np.ndarray]`, `list[torch.Tensor]`):
                The image or batch of images to be prepared. Each image can be a PIL image, NumPy array or PyTorch
                tensor. In case of a NumPy array/PyTorch tensor, each image should be of shape (C, H, W), where C is a
                number of channels, H and W are image height and width.
            return_tensors (`str` or [`~utils.TensorType`], *optional*):
                If set, will return tensors of a particular framework. Acceptable values are:

                - `'pt'`: Return PyTorch `torch.Tensor` objects.
                - `'np'`: Return NumPy `np.ndarray` objects.

        Returns:
            [`BatchFeature`]: A [`BatchFeature`] with the following fields:

            - **input_ids** -- List of token ids to be fed to a model.
            - **attention_mask** -- List of indices specifying which tokens should be attended to by the model (when
              `return_attention_mask=True` or if *"attention_mask"* is in `self.model_input_names` and if `text` is not
              `None`).
            - **pixel_values** -- Pixel values to be fed to a model. Returned when `images` is not `None`.
        r^   r   ÚsuffixNr   zAimages must be an image, list of images or list of list of imagesc                 ó8   — g | ]}|                      d ¦  «        ‘ŒS )ÚRGB)Úconvert)r=   rh   s     r(   rA   z:ColModernVBertProcessor.process_images.<locals>.<listcomp>z  s$   € Ð;Ð;Ð;¨5�%—-’- Ñ&Ô&Ð;Ð;Ð;r'   r    )r[   rZ   r    r   rf   Útoken_type_idsiœÿÿÿÚlabels)rn   r   r@   ro   rp   r
   r�   r‘   r›   rƒ   r0   r“   Úmasked_fillrÃ   )rU   rZ   rW   rx   rÑ   Úreturn_token_type_idsÚ	batch_docrÖ   s           r(   Úprocess_imagesz&ColModernVBertProcessor.process_imagesI  sŸ  € ð< +˜Ô*Ý)ð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆð ˜}Ô-×1Ò1°(¸DÑAÔAˆà &¨dÐ 2Ðõ ˜&Ñ!Ô!ð 	bØ�XˆFˆFÝ˜¥Ñ%Ô%ð 	b­.¸À¼Ñ*CÔ*Cð 	bØÝ˜V¥TÑ*Ô*ð 	b­z¸&À¼)ÅTÑ/JÔ/Jð 	bÍ~Ð^dÐefÔ^gÐhiÔ^jÑOkÔOkð 	bÝÐ`ÑaÔaÐað <Ð;°FÐ;Ñ;Ô;ˆð —M’MØÔ+Ð,­s°6©{¬{Ñ:ØØ'¨Ô8Ø% mÔ4ð	 "ñ 
ô 
ˆ	ð !ð 	1Ø˜{Ô+×7Ò7¸	ÐBRÔ8SÐWXÒ8XÐZ^Ñ_Ô_ˆFØ×Ò˜h¨Ð/Ñ0Ô0Ð0àÐr'   c                 ó¢  ‡ ‡—  ‰ j         t          fd‰ j        j        i|¤Ž}|d                              dd¦  «        Št          |t          ¦  «        r|g}n?t          |t          ¦  «        rt          |d         t          ¦  «        st          d¦  «        ‚‰€
‰ j	        dz  Šˆ ˆfd„|D ¦   «         }‰  
                    |d	|d         ¬
¦  «        }|S )ad  
        Prepare for the model one or several text queries. Handles input validation, prepends the
        `query_prefix`, and appends query augmentation tokens (used to pad query embeddings for
        better late-interaction retrieval performance).

        Args:
            text (`str`, `list[str]`, `list[list[str]]`):
                The sequence or batch of sequences to be encoded. Each sequence can be a string or a list of strings
                (pretokenized string). If the sequences are provided as list of strings (pretokenized), you must set
                `is_split_into_words=True` (to lift the ambiguity with a batch of sequences).
            return_tensors (`str` or [`~utils.TensorType`], *optional*):
                If set, will return tensors of a particular framework. Acceptable values are:

                - `'pt'`: Return PyTorch `torch.Tensor` objects.
                - `'np'`: Return NumPy `np.ndarray` objects.

        Returns:
            [`BatchFeature`]: A [`BatchFeature`] with the following fields:

            - **input_ids** -- List of token ids to be fed to a model.
            - **attention_mask** -- List of indices specifying which tokens should be attended to by the model (when
              `return_attention_mask=True` or if *"attention_mask"* is in `self.model_input_names` and if `text` is not
              `None`).
        r^   r   rÑ   Nr   z*Text must be a string or a list of stringsé
   c                 ó*   •— g | ]}‰j         |z   ‰z   ‘ŒS r&   )r1   )r=   ÚqueryrU   rÑ   s     €€r(   rA   z;ColModernVBertProcessor.process_queries.<locals>.<listcomp>º  s&   ø€ Ð!WÐ!WÐ!WÈ $Ô"3°eÑ";¸fÑ"DÐ!WÐ!WÐ!Wr'   F)r[   rØ   r   )rn   r   r@   ro   rp   r�   rŽ   r‘   r›   rT   rƒ   )rU   r[   rW   rx   Útexts_queryÚbatch_queryrÑ   s   `     @r(   Úprocess_queriesz'ColModernVBertProcessor.process_queries‹  s  øø€ ð: +˜Ô*Ý)ð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆð ˜}Ô-×1Ò1°(¸DÑAÔAˆå�d�CÑ Ô ð 	KØ�6ˆDˆDÝ˜T¥4Ñ(Ô(ð 	K­Z¸¸Q¼ÅÑ-EÔ-Eð 	KÝÐIÑJÔJÐJð ˆ>ØÔ2°RÑ7ˆFð "XÐ!WÐ!WÐ!WÐ!WÐRVÐ!WÑ!WÔ!Wˆà—m’mØØ"'Ø% mÔ4ð $ñ 
ô 
ˆð Ðr'   é€   ÚcpuÚquery_embeddingsztorch.TensorÚpassage_embeddingsÚ
batch_sizeÚoutput_dtypeztorch.dtypeÚoutput_deviceztorch.devicec           	      ó8  — t          |¦  «        dk    rt          d¦  «        ‚t          |¦  «        dk    rt          d¦  «        ‚|d         j        |d         j        k    rt          d¦  «        ‚|d         j        |d         j        k    rt          d¦  «        ‚|€|d         j        }g }t	          dt          |¦  «        |¦  «        D �]:}g }t
          j        j        j         	                    ||||z   …         dd¬¦  «        }	t	          dt          |¦  «        |¦  «        D ]�}
t
          j        j        j         	                    ||
|
|z   …         dd¬¦  «        }| 
                    t          j        d	|	|¦  «                             d
¬¦  «        d                              d¬¦  «        ¦  «         Œ‘| 
                    t          j        |d¬¦  «                             |¦  «                             |¦  «        ¦  «         �Œ<t          j        |d¬¦  «        S )a[  
        Compute the late-interaction/MaxSim score (ColBERT-like) for the given multi-vector
        query embeddings (`qs`) and passage embeddings (`ps`). For ColQwen2, a passage is the
        image of a document page.

        Because the embedding tensors are multi-vector and can thus have different shapes, they
        should be fed as:
        (1) a list of tensors, where the i-th tensor is of shape (sequence_length_i, embedding_dim)
        (2) a single tensor of shape (n_passages, max_sequence_length, embedding_dim) -> usually
            obtained by padding the list of tensors.

        Args:
            query_embeddings (`Union[torch.Tensor, list[torch.Tensor]`): Query embeddings.
            passage_embeddings (`Union[torch.Tensor, list[torch.Tensor]`): Passage embeddings.
            batch_size (`int`, *optional*, defaults to 128): Batch size for computing scores.
            output_dtype (`torch.dtype`, *optional*, defaults to `torch.float32`): The dtype of the output tensor.
                If `None`, the dtype of the input embeddings is used.
            output_device (`torch.device` or `str`, *optional*, defaults to "cpu"): The device of the output tensor.

        Returns:
            `torch.Tensor`: A tensor of shape `(n_queries, n_passages)` containing the scores. The score
            tensor is saved on the "cpu" device.
        r   zNo queries providedzNo passages providedz/Queries and passages must be on the same devicez-Queries and passages must have the same dtypeNT)Úbatch_firstÚpadding_valuezbnd,csd->bcnsr   )Údimr¿   r8   )r“   r›   ÚdeviceÚdtyper;   r*   ÚnnÚutilsÚrnnÚpad_sequenceru   ÚeinsumÚmaxr�   ÚcatÚto)rU   rä   rå   ræ   rç   rè   Úscoresr>   Úbatch_scoresÚbatch_queriesr?   Úbatch_passagess               r(   Úscore_retrievalz'ColModernVBertProcessor.score_retrievalÄ  s*  € õ@ ÐÑ Ô  AÒ%Ð%ÝÐ2Ñ3Ô3Ð3ÝÐ!Ñ"Ô" aÒ'Ð'ÝÐ3Ñ4Ô4Ð4à˜AÔÔ%Ð);¸AÔ)>Ô)EÒEÐEÝÐNÑOÔOÐOà˜AÔÔ$Ð(:¸1Ô(=Ô(CÒCÐCÝÐLÑMÔMÐMàÐØ+¨AÔ.Ô4ˆLà%'ˆå�q�#Ð.Ñ/Ô/°Ñ<Ô<ð 	]ñ 	]ˆAØ/1ˆLÝ!œHœNÔ.×;Ò;Ø   Q¨¡^Ð!3Ô4À$ÐVWð <ñ ô ˆMõ ˜1�cÐ"4Ñ5Ô5°zÑBÔBð ð �Ý!&¤¤Ô!3×!@Ò!@Ø& q¨1¨z©>Ð'9Ô:ÈÐ\]ð "Añ "ô "�ð ×#Ò#Ý”L °-ÀÑPÔP×TÒTÐYZÐTÑ[Ô[Ð\]Ô^×bÒbÐghÐbÑiÔiñô ð ð ð �MŠM�%œ) L°aÐ8Ñ8Ô8×;Ò;¸LÑIÔI×LÒLÈ]Ñ[Ô[Ñ\Ô\Ð\Ñ\åŒy˜ QÐ'Ñ'Ô'Ð'r'   )NNr.   NN)NNN)NN)N)râ   Nrã   )r"   r#   r$   r   Úvalid_processor_kwargsÚintrŽ   rS   r   r	   r‘   r   r   r   r   rƒ   rl   r   rm   Údictr®   rv   rÏ   r   rÚ   rá   r   rû   Ú__classcell__)rY   s   @r(   r-   r-   6   s–  ø€ € € € € ð ;Ðð
 ØØØ+/Ø#'ð3Dð 3Dð
 ð3Dð " D™jð3Dð ˜D‘jð3Dð 3Dð 3Dð 3Dð 3Dð 3Dðj ð JNØbfØ$(ð	>^ð >^à˜T *Ô-Ñ-°°T¸*Ô5EÔ0FÑFð>^ð �IÐ2°D¸´OÀTÐJ]ÔE^Ð^Ô_ð>^ð ˜T‘zð	>^ð
 Ð6Ô7ð>^ð 
ð>^ð >^ð >^ñ „^ð>^ðD %)Øbfð ð  à˜TÑ!ð ð �IÐ2°D¸´OÀTÐJ]ÔE^Ð^Ô_ð ð Ð6Ô7ð	 ð  ð  ð  ðH %)Øbfðð à˜TÑ!ðð �IÐ2°D¸´OÀTÐJ]ÔE^Ð^Ô_ðð Ð)Ô*ð	ð ð ð ð ð ð2%°ð %Àð %Èð %ð %ð %ð %ð:!°$ð !ÐQUÐVYÔQZð !Ð_cÐdhÐilÔdmÔ_nð !ð !ð !ð !ð*)-ð )-ð )-ð )-ðZ %)ð@ð @à˜TÑ!ð@ð Ð6Ô7ð@ð 
ð	@ð @ð @ð @ðD7à˜$˜yœ/Ñ)ð7ð Ð6Ô7ð7ð 
ð	7ð 7ð 7ð 7ðz Ø04Ø49ð>(ð >(à °°^Ô0DÐ DÔEð>(ð " .°$°~Ô2FÐ"FÔGð>(ð ð	>(ð
 ˜}Ô-ð>(ð ˜^¨SÐ0Ô1ð>(ð 
ð>(ð >(ð >(ð >(ð >(ð >(ð >(ð >(r'   r-   ) rN   Ú	itertoolsr   Útypingr   r   r   Únumpyr°   r*   Úfeature_extraction_utilsr   Úimage_utilsr	   r
   Úprocessing_utilsr   r   r   r   Útokenization_utils_baser   r   r   rð   r   Úutils.import_utilsr   r   r   r-   Ú__all__r&   r'   r(   ú<module>r	     s˜  ðð* 
€	€	€	Ø  Ð  Ð  Ð  Ð  Ð  Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à Ð Ð Ð Ø €€€à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ #Ð #Ð #Ð #Ð #Ð #Ø *Ð *Ð *Ð *Ð *Ð *ð ð =Ø<Ð<Ð<Ð<Ð<Ð<ðð ð ð ð Ð$4¸Eð ñ ô ð ð 
€�:ÐÑÔØðJ(ð J(ð J(ð J(ð J(˜nñ J(ô J(ñ „ñ ÔðJ(ðZ %Ð
%€€€r'   