§
    ‚Štj²[  ã                   óÄ  — d dl Z d dlmZ d dlZd dlmZ d dlmc mZ d dl	m
c mc mZ d dlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;  e/j<        e=¦  «        Z> e,d¬¦  «        e G d„ de8¦  «        ¦   «         ¦   «         Z? G d„ de:¦  «        Z@ e,d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         ZA G d„ d ejB        ¦  «        ZC G d!„ d"ejB        ¦  «        ZD G d#„ d$e&¦  «        ZE G d%„ d&e;¦  «        ZF G d'„ d(eE¦  «        ZG G d)„ d*eE¦  «        ZHe,e G d+„ d,e$¦  «        ¦   «         ¦   «         ZI e,d-¬.¦  «         G d/„ d0eE¦  «        ¦   «         ZJe, e4d1¬2¦  «         G d3„ d4e¦  «        ¦   «         ¦   «         ZKg d5¢ZLdS )6é    N)Ú	dataclass)Ústricté   )Úinitialization)ÚACT2CLS)Úfilter_output_hidden_states)ÚPreTrainedConfig)ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDÚSizeDict)ÚBaseModelOutput)ÚPreTrainedModel)ÚImagesKwargsÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torchdynamo_compilingÚlogging)Ú
TensorTypeÚmerge_with_config_defaults)Úrequires)Úcapture_outputsé   )ÚGotOcr2VisionConfig)ÚGotOcr2VisionAttentionÚGotOcr2VisionEncoderz&PaddlePaddle/SLANeXt_wired_safetensors)Ú
checkpointc                   ó   — e Zd ZU dZeed<   dS )ÚSLANeXtVisionConfigé   Ú
image_sizeN)Ú__name__Ú
__module__Ú__qualname__r&   ÚintÚ__annotations__© ó    úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/slanext/modular_slanext.pyr$   r$   2   s$   € € € € € € ð €J�ÐÐÑÐÐr-   r$   c                   ó   — e Zd ZdS )ÚSLANeXtVisionAttentionN©r'   r(   r)   r,   r-   r.   r0   r0   8   ó   € € € € € Ø€Dr-   r0   c                   ó�   ‡ — e Zd ZU dZdZdeiZdZeez  dz  e	d<   dZ
ee	d<   dZee	d<   d	Zee	d
<   dZee	d<   dZee	d<   ˆ fd„Zˆ xZS )ÚSLANeXtConfigaÖ  
    vision_config (`dict` or [`SLANeXtVisionConfig`], *optional*):
        Configuration for the vision encoder. If `None`, a default [`SLANeXtVisionConfig`] is used.
    post_conv_in_channels (`int`, *optional*, defaults to 256):
        Number of input channels for the post-encoder convolution layer.
    post_conv_out_channels (`int`, *optional*, defaults to 512):
        Number of output channels for the post-encoder convolution layer.
    out_channels (`int`, *optional*, defaults to 50):
        Vocabulary size for the table structure token prediction head, i.e., the number of distinct structure
        tokens the model can predict.
    hidden_size (`int`, *optional*, defaults to 512):
        Dimensionality of the hidden states in the attention GRU cell and the structure/location prediction heads.
    max_text_length (`int`, *optional*, defaults to 500):
        Maximum number of autoregressive decoding steps (tokens) for the structure and location decoder.
    ÚslanextÚvision_configNé   Úpost_conv_in_channelsr%   Úpost_conv_out_channelsé2   Úout_channelsÚhidden_sizeiô  Úmax_text_lengthc                 óÐ   •— | j         €t          ¦   «         | _         n0t          | j         t          ¦  «        rt          di | j         ¤Ž| _          t	          ¦   «         j        di |¤Ž d S ©Nr,   )r6   r$   Ú
isinstanceÚdictÚsuperÚ__post_init__©ÚselfÚkwargsÚ	__class__s     €r.   rC   zSLANeXtConfig.__post_init__Y   so   ø€ ØÔÐ%Ý!4Ñ!6Ô!6ˆDÔÐÝ˜Ô*­DÑ1Ô1ð 	KÝ!4Ð!JÐ!J°tÔ7IÐ!JÐ!JˆDÔØ�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'r-   )r'   r(   r)   Ú__doc__Ú
model_typer$   Úsub_configsr6   rA   r+   r8   r*   r9   r;   r<   r=   rC   Ú__classcell__©rG   s   @r.   r4   r4   <   sÃ   ø€ € € € € € ðð ð  €JØ"Ð$7Ð8€Kà7;€M�4Ð-Ñ-°Ñ4Ð;Ð;Ñ;Ø!$Ð˜3Ð$Ð$Ñ$Ø"%Ð˜CÐ%Ð%Ñ%Ø€L�#ÐÐÑØ€K�ÐÐÑØ€O�SÐÐÑð(ð (ð (ð (ð (ð (ð (ð (ð (r-   r4   c            	       ó`   ‡ — e Zd Zˆ fd„Zdej        dej        dej        dee         fd„Zˆ xZ	S )ÚSLANeXtAttentionGRUCellc                 ó&  •— t          ¦   «                              ¦   «          t          j        ||d¬¦  «        | _        t          j        ||¦  «        | _        t          j        |dd¬¦  «        | _        t          j        ||z   |¦  «        | _        d S )NF)Úbiasé   )	rB   Ú__init__ÚnnÚLinearÚinput_to_hiddenÚhidden_to_hiddenÚscoreÚGRUCellÚrnn)rE   Ú
input_sizer<   Únum_embeddingsrG   s       €r.   rR   z SLANeXtAttentionGRUCell.__init__b   sz   ø€ Ý‰Œ×ÒÑÔÐå!œy¨°[ÀuÐMÑMÔMˆÔÝ "¤	¨+°{Ñ CÔ CˆÔÝ”Y˜{¨A°EÐ:Ñ:Ô:ˆŒ
å”:˜j¨>Ñ9¸;ÑGÔGˆŒˆˆr-   Úprev_hiddenÚbatch_hiddenÚchar_onehotsrF   c                 ó(  — |                       |¦  «        }|                      |¦  «                             d¦  «        }||z   }t          j        |¦  «        }|                      |¦  «        }t          j        |dt          j        ¬¦  «         	                    |j
        ¦  «        }|                     dd¦  «        }t          j        ||¦  «                             d¦  «        }	t          j        |	|gd¦  «        }
|                      |
|¦  «        }||fS )NrQ   ©ÚdimÚdtyper   )rU   rV   Ú	unsqueezeÚtorchÚtanhrW   ÚFÚsoftmaxÚfloat32Útorb   Ú	transposeÚmatmulÚsqueezeÚcatrY   )rE   r\   r]   r^   rF   Úbatch_hidden_projÚprev_hidden_projÚattention_scoresÚattn_weightsÚcontextÚconcat_contextÚhidden_statess               r.   ÚforwardzSLANeXtAttentionGRUCell.forwardk   sý   € ð !×0Ò0°Ñ>Ô>ÐØ×0Ò0°Ñ=Ô=×GÒGÈÑJÔJÐà,Ð/?Ñ?ÐÝ œ:Ð&6Ñ7Ô7ÐØŸ:š:Ð&6Ñ7Ô7Ðå”yÐ!1°qÅÄÐNÑNÔN×QÒQÐRbÔRhÑiÔiˆØ#×-Ò-¨a°Ñ3Ô3ˆÝ”,˜|¨\Ñ:Ô:×BÒBÀ1ÑEÔEˆÝœ G¨\Ð#:¸AÑ>Ô>ˆØŸš °Ñ=Ô=ˆà˜lÐ*Ð*r-   )
r'   r(   r)   rR   rd   ÚFloatTensorr   r   ru   rK   rL   s   @r.   rN   rN   a   s†   ø€ € € € € ðHð Hð Hð Hð Hð+àÔ&ð+ð Ô'ð+ð Ô'ð	+ð
 Ð+Ô,ð+ð +ð +ð +ð +ð +ð +ð +r-   rN   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú
SLANeXtMLPNc                 ó  •— t          ¦   «                              ¦   «          t          j        ||¦  «        | _        t          j        ||¦  «        | _        |€t          j        ¦   «         nt          |         ¦   «         | _        d S ©N)	rB   rR   rS   rT   Úfc1Úfc2ÚIdentityr   Úact_fn)rE   r<   r;   Ú
activationrG   s       €r.   rR   zSLANeXtMLP.__init__ƒ   sd   ø€ Ý‰Œ×ÒÑÔÐÝ”9˜[¨+Ñ6Ô6ˆŒÝ”9˜[¨,Ñ7Ô7ˆŒØ'1Ð'9•b”k‘m”m�m½wÀzÔ?RÑ?TÔ?TˆŒˆˆr-   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rz   )r{   r|   r~   )rE   rt   s     r.   ru   zSLANeXtMLP.forward‰   s;   € ØŸš Ñ/Ô/ˆØŸš Ñ/Ô/ˆØŸš MÑ2Ô2ˆØÐr-   rz   )r'   r(   r)   rR   ru   rK   rL   s   @r.   rx   rx   ‚   sR   ø€ € € € € ðUð Uð Uð Uð Uð Uðð ð ð ð ð ð r-   rx   c                   ól   ‡ — e Zd ZU eed<   dZdZdZdZddgZ	 e
j        ¦   «         ˆ fd„¦   «         Zˆ xZS )	ÚSLANeXtPreTrainedModelÚconfigÚbackboneÚpixel_values)ÚimageTÚstructure_attention_cellÚstructure_generatorc                 óD  •— t          ¦   «                              |¦  «         t          |t          ¦  «        r!|j        �t          j        |j        d¦  «         t          |t          ¦  «        r;|j        r4t          j        |j	        d¦  «         t          j        |j
        d¦  «         t          |t          j        ¦  «        r§|j        dk    rdt          j        |j        ¦  «        z  nd}t          j        |j        | |¦  «         t          j        |j        | |¦  «         |j        �t          j        |j        | |¦  «         |j        �t          j        |j        | |¦  «         t          |t*          ¦  «        rŸdt          j        | j        j        dz  ¦  «        z  }|j        fD ]t}|                     ¦   «         D ][}t          |t          j        ¦  «        r?t          j        |j        | |¦  «         |j        �t          j        |j        | |¦  «         Œ\ŒsdS dS )zInitialize the weightsNg        r   g      ð?)rB   Ú_init_weightsr@   ÚSLANeXtVisionEncoderÚ	pos_embedÚinitÚ	constant_r0   Úuse_rel_posÚ	rel_pos_hÚ	rel_pos_wrS   rX   r<   ÚmathÚsqrtÚuniform_Ú	weight_ihÚ	weight_hhÚbias_ihÚbias_hhÚSLANeXtSLAHeadrƒ   rˆ   ÚchildrenrT   ÚweightrP   )rE   ÚmoduleÚstdÚ	generatorÚlayerrG   s        €r.   rŠ   z$SLANeXtPreTrainedModel._init_weights˜   s  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%õ �fÕ2Ñ3Ô3ð 	6ØÔÐ+Ý”˜vÔ/°Ñ5Ô5Ð5õ �fÕ4Ñ5Ô5ð 	6ØÔ!ð 6Ý”˜vÔ/°Ñ5Ô5Ð5Ý”˜vÔ/°Ñ5Ô5Ð5õ �f�bœjÑ)Ô)ð 	9Ø9?Ô9KÈaÒ9OÐ9O�#�œ	 &Ô"4Ñ5Ô5Ñ5Ð5ÐUVˆCÝŒM˜&Ô*¨S¨D°#Ñ6Ô6Ð6ÝŒM˜&Ô*¨S¨D°#Ñ6Ô6Ð6ØŒ~Ð)Ý”˜fœn¨s¨d°CÑ8Ô8Ð8ØŒ~Ð)Ý”˜fœn¨s¨d°CÑ8Ô8Ð8õ �f�nÑ-Ô-ð 	AØ�œ	 $¤+Ô"9¸CÑ"?Ñ@Ô@Ñ@ˆCà$Ô8Ð:ð Að A�	Ø&×/Ò/Ñ1Ô1ð Að A�EÝ! %­¬Ñ3Ô3ð AÝœ e¤l°S°D¸#Ñ>Ô>Ð>Ø œ:Ð1Ý œM¨%¬*°s°d¸CÑ@Ô@Ð@øð	Að		Að 	AðAð Ar-   )r'   r(   r)   r4   r+   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_keep_in_fp32_modules_strictrd   Úno_gradrŠ   rK   rL   s   @r.   r‚   r‚   �   s„   ø€ € € € € € ØÐÐÑØ"ÐØ$€OØ!ÐØ&*Ð#Ø$>Ð@UÐ#VÐ à€U„]�_„_ð"Að "Að "Að "Añ „_ð"Að "Að "Að "Að "Ar-   r‚   c                   ó   — e Zd ZdS )r‹   Nr1   r,   r-   r.   r‹   r‹   ¾   r2   r-   r‹   c                   óT   ‡ — e Zd Z	 ddedz  fˆ fd„Zdej        dee         fd„Z	ˆ xZ
S )ÚSLANeXtBackboneNrƒ   c                 óö   •— t          ¦   «                              |¦  «         t          |j        ¦  «        | _        t          j        |j        |j        dddd¬¦  «        | _	        |  
                    ¦   «          d S )Nr   r   rQ   F)Úkernel_sizeÚstrideÚpaddingrP   )rB   rR   r‹   r6   Úvision_towerrS   ÚConv2dr8   r9   Ú	post_convÚ	post_init©rE   rƒ   rF   rG   s      €r.   rR   zSLANeXtBackbone.__init__Ã   sw   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð Ý0°Ô1EÑFÔFˆÔÝœØÔ(¨&Ô*GÐUVÐ_`ÐjkÐrwð
ñ 
ô 
ˆŒð 	�ŠÑÔÐÐÐr-   rt   rF   c                 óÜ   —  | j         |fi |¤Ž}|                      |j        ¦  «        }|                     d¦  «                             dd¦  «        }t          ||j        |j        ¬¦  «        S )Nr   rQ   )Úlast_hidden_statert   Ú
attentions)r­   r¯   r³   Úflattenrj   r   rt   r´   )rE   rt   rF   Úvision_outputs       r.   ru   zSLANeXtBackbone.forwardÏ   sy   € Ø)˜Ô)¨-ÐBÐB¸6ÐBÐBˆØŸš }Ô'FÑGÔGˆØ%×-Ò-¨aÑ0Ô0×:Ò:¸1¸aÑ@Ô@ˆÝØ+Ø'Ô5Ø$Ô/ð
ñ 
ô 
ð 	
r-   rz   )r'   r(   r)   rA   rR   rd   ÚTensorr   r   ru   rK   rL   s   @r.   r¨   r¨   Â   s}   ø€ € € € € ð #ð
ð 
à�t‘ð
ð 
ð 
ð 
ð 
ð 
ð
 U¤\ð 
¸VÐDVÔ=Wð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r-   r¨   c                   ó¤   ‡ — e Zd ZdeiZ	 d	dedz  fˆ fd„Zeee		 d	de
j        de
j        dz  dee         fd„¦   «         ¦   «         ¦   «         Zˆ xZS )
r™   r´   Nrƒ   c                 óú   •— t          ¦   «                              |¦  «         t          |j        |j        |j        ¦  «        | _        t          |j        |j        ¦  «        | _        |  	                    ¦   «          d S rz   )
rB   rR   rN   r9   r<   r;   r‡   rx   rˆ   r°   r±   s      €r.   rR   zSLANeXtSLAHead.__init__ß   so   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð å(?ØÔ)¨6Ô+=¸vÔ?Rñ)
ô )
ˆÔ%õ $.¨fÔ.@À&ÔBUÑ#VÔ#VˆÔ à�ŠÑÔÐÐÐr-   rt   ÚtargetsrF   c                 ó  — t          j        |j        d         | j        j        ft           j        |j        ¬¦  «        }t          j        |j        d         gt           j        |j        ¬¦  «        }g }g }t          | j        j	        dz   ¦  «        D �]}t          j        || j        j        ¦  «                             ¦   «         }	|                      ||                     ¦   «         |	¦  «        \  }}|                      |¦  «        }
|
                     d¬¦  «        }|                     |
¦  «         |                     |¦  «         t          j        |d¬¦  «                             | j        j        dz
  ¦  «                             d¦  «                             ¦   «         r n�Œt          j        t          j        |d¬¦  «        dt           j        ¬¦  «                             |j        ¦  «        }t3          ||¬¦  «        S )	Nr   ©rb   Údevice)Úsizerb   r½   rQ   ©ra   éÿÿÿÿr`   )r³   rt   )rd   ÚzerosÚshaperƒ   r<   rh   r½   ÚlongÚranger=   rf   Úone_hotr;   Úfloatr‡   rˆ   ÚargmaxÚappendÚstackÚeqÚanyÚallrg   ri   rb   r   )rE   rt   rº   rF   ÚfeaturesÚpredicted_charsÚstructure_preds_listÚstructure_ids_listÚ_Úembedding_featureÚstructure_stepÚstructure_predss               r.   ru   zSLANeXtSLAHead.forwardí   sØ  € õ ”;ØÔ  Ô# T¤[Ô%<Ð=ÅUÄ]Ð[hÔ[oð
ñ 
ô 
ˆõ  œ+¨MÔ,?ÀÔ,BÐ+CÍ5Ì:Ð^kÔ^rÐsÑsÔsˆà!ÐØÐÝ�t”{Ô2°QÑ6Ñ7Ô7ð 		ñ 		ˆAÝ !¤	¨/¸4¼;Ô;SÑ TÔ T× ZÒ ZÑ \Ô \ÐØ×7Ò7¸À-×BUÒBUÑBWÔBWÐYjÑkÔk‰KˆH�aØ!×5Ò5°hÑ?Ô?ˆNØ,×3Ò3¸Ð3Ñ:Ô:ˆOà ×'Ò'¨Ñ7Ô7Ð7Ø×%Ò% oÑ6Ô6Ð6ÝŒ{Ð-°1Ð5Ñ5Ô5×8Ò8¸¼Ô9QÐTUÑ9UÑVÔV×ZÒZÐ[]Ñ^Ô^×bÒbÑdÔdð Ø�ñåœ)¥E¤KÐ0DÈ!Ð$LÑ$LÔ$LÐRTÕ\aÔ\iÐjÑjÔj×mÒmØÔñ
ô 
ˆõ °ÐPdÐeÑeÔeÐer-   rz   )r'   r(   r)   rN   Ú_can_record_outputsrA   rR   r   r   r   rd   rv   r·   r   r   ru   rK   rL   s   @r.   r™   r™   Ú   sÙ   ø€ € € € € àÐ-ðÐð #ðð à�t‘ðð ð ð ð ð ð  ØØ ð (,ðfð fàÔ(ðfð ” Ñ$ðfð Ð+Ô,ð	fð fð fñ !Ô ñ „_ñ  Ôðfð fð fð fð fr-   r™   c                   óP   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dS )Ú SLANeXtForTableRecognitionOutputam  
    head_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Hidden-states of the SLANeXtSLAHead at each prediction step, varies up to max `self.config.max_text_length` states (depending on early exits).
    head_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Attentions of the SLANeXtSLAHead at each prediction step, varies up to max `self.config.max_text_length` attentions (depending on early exits).
    NÚhead_hidden_statesÚhead_attentions)	r'   r(   r)   rH   rØ   rd   rv   r+   rÙ   r,   r-   r.   r×   r×     sO   € € € € € € ðð ð 48Ð˜Ô)¨DÑ0Ð7Ð7Ñ7Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ð4Ð4r-   r×   z¼
    SLANeXt Table Recognition model for table recognition tasks. Wraps the core SLANeXtPreTrainedModel
    and returns outputs compatible with the Transformers table recognition API.
    )Úcustom_introc            	       óŠ   ‡ — e Zd Zdefˆ fd„Zeedej        de	e
         deej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚSLANeXtForTableRecognitionrƒ   c                 óÆ   •— t          ¦   «                              |¦  «         t          |¬¦  «        | _        t	          |¬¦  «        | _        |                      ¦   «          d S )N)rƒ   )rB   rR   r¨   r„   r™   Úheadr°   )rE   rƒ   rG   s     €r.   rR   z#SLANeXtForTableRecognition.__init__#  sU   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý'¨vÐ6Ñ6Ô6ˆŒÝ"¨&Ð1Ñ1Ô1ˆŒ	Ø�ŠÑÔÐÐÐr-   r…   rF   Úreturnc                 óž   —  | j         |fi |¤Ž} | j        |j        fi |¤Ž}t          |j        |j        |j        |j        |j        ¬¦  «        S )N)r³   rt   r´   rØ   rÙ   )r„   rÞ   r³   r×   rt   r´   )rE   r…   rF   Úbackbone_outputsÚhead_outputss        r.   ru   z"SLANeXtForTableRecognition.forward)  sp   € ð
 )˜4œ=¨Ð@Ð@¸Ð@Ð@ÐØ �t”yÐ!1Ô!CÐNÐNÀvÐNÐNˆÝ/Ø*Ô<Ø*Ô8Ø'Ô2Ø+Ô9Ø(Ô3ð
ñ 
ô 
ð 	
r-   )r'   r(   r)   r4   rR   r   r   rd   rv   r   r   Útupler×   ru   rK   rL   s   @r.   rÜ   rÜ     sž   ø€ € € € € ð˜}ð ð ð ð ð ð ð Øð
Ø!Ô-ð
Ø9?Ð@RÔ9Sð
à	ˆuÔ Ô	!Ð$DÑ	Dð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r-   rÜ   )rd   )Úbackendsc                    ó&  ‡ — e Zd ZdZeZeZdddœZdddœZ	dZ
dZdZdZdZdddeddfd	„Zd
ed         dededddedededededeee         z  dz  deee         z  dz  dedz  dedz  dedz  deez  dz  def d„Zdee         fˆ fd„Zd„ Zd„ Zˆ xZS )ÚSLANeXtImageProcessorr   r%   )ÚheightÚwidthTr†   ztorch.Tensorr¾   rß   c                 ó8  — |j         \  }}}}|                     ||z  ||¦  «        }|j        }t          |j        |j        ¦  «        t          ||¦  «        z  }t          ||z  ¦  «        }	t          ||z  ¦  «        }
t          j        |
t          j	        |¬¦  «        }|dz   t          |¦  «        t          |
¦  «        z  z  dz
  }|                     ¦   «                              t          j        ¦  «        }|| 
                    ¦   «         z
  }t          j        |dk     t          j        |¦  «        |¦  «        }t          j        |dk     t          j        |¦  «        |¦  «        }t          j        ||dz
  k    t          j        |¦  «        |¦  «        }t          j        ||dz
  k    t          j        ||dz
  ¦  «        |¦  «        }|dz  dz                        ¦   «                              t          j        ¦  «        }d|z
  }t          j        |	t          j	        |¬¦  «        }|dz   t          |¦  «        t          |	¦  «        z  z  dz
  }|                     ¦   «                              t          j        ¦  «        }|| 
                    ¦   «         z
  }t          j        |dk     t          j        |¦  «        |¦  «        }t          j        |dk     t          j        |¦  «        |¦  «        }t          j        ||dz
  k    t          j        |¦  «        |¦  «        }t          j        ||dz
  k    t          j        ||dz
  ¦  «        |¦  «        }|dz  dz                        ¦   «                              t          j        ¦  «        }d|z
  }|                     dd¦  «                             t          j        ¦  «        }|                     t          j        ¦  «        }|                     ¦   «         }|dz                        ¦   «         }|                     ¦   «         }|dz                        ¦   «         }|d d …|d d …d f         |d d d …f         f         }|d d …|d d …d f         |d d d …f         f         }|d d …|d d …d f         |d d d …f         f         }|d d …|d d …d f         |d d d …f         f         } |                     d|	d¦  «        }!|                     d|	d¦  «        }"|                     dd|
¦  «        }#|                     dd|
¦  «        }$|"|$|z  |#|z  z   z  |!|$|z  |#| z  z   z  z   }%|%dz   d	z	  }%|%                     dd¦  «                             t          j        ¦  «        }&|&                     |||	|
¦  «                             |j        ¬
¦  «        S )Nr¼   g      à?r   rQ   r   i   éÿ   i    é   )rb   )rÂ   Úviewr½   Úmaxrç   rè   Úroundrd   Úarangerh   rÆ   Úfloorri   Úint32ÚwhereÚ
zeros_likeÚ	ones_likeÚ	full_likeÚclampÚuint8rÃ   rb   )'rE   r†   r¾   Ú
batch_sizeÚchannelsrç   rè   r½   ÚscaleÚtarget_heightÚtarget_widthÚ
target_colÚsrc_colÚsrc_col_floorÚsrc_col_fracÚweight_rightÚweight_leftÚ
target_rowÚsrc_rowÚsrc_row_floorÚsrc_row_fracÚweight_bottomÚ
weight_topÚimage_uint8Úimage_int32Úcol_leftÚ	col_rightÚrow_topÚ
row_bottomÚpixel_top_leftÚpixel_top_rightÚpixel_bottom_leftÚpixel_bottom_rightÚweight_bottom_3dÚweight_top_3dÚweight_right_3dÚweight_left_3dÚinterpÚresults'                                          r.   Ú_resizezSLANeXtImageProcessor._resizeG  sL  € ð
 /4¬kÑ+ˆ
�H˜f eØ—
’
˜:¨Ñ0°&¸%Ñ@Ô@ˆà”ˆå�D”K ¤Ñ,Ô,­s°6¸5Ñ/AÔ/AÑAˆÝ˜f u™nÑ-Ô-ˆÝ˜U U™]Ñ+Ô+ˆå”\ ,µe´mÈFÐSÑSÔSˆ
Ø Ñ#­¨e©¬µu¸\Ñ7JÔ7JÑ(JÑKÈcÑQˆØŸš™œ×*Ò*­5¬;Ñ7Ô7ˆØ ×!4Ò!4Ñ!6Ô!6Ñ6ˆå”{ =°1Ò#4µeÔ6FÀ|Ñ6TÔ6TÐVbÑcÔcˆÝœ M°AÒ$5µuÔ7GÈÑ7VÔ7VÐXeÑfÔfˆÝ”{ =°E¸A±IÒ#=½u¼È|Ñ?\Ô?\Ð^jÑkÔkˆÝœØ˜U Q™YÒ&­¬¸ÀuÈqÁyÑ(QÔ(QÐS`ñ
ô 
ˆð % tÑ+¨cÑ1×8Ò8Ñ:Ô:×=Ò=½e¼kÑJÔJˆØ˜\Ñ)ˆå”\ -µu´}ÈVÐTÑTÔTˆ
Ø Ñ#­¨f©¬½¸mÑ8LÔ8LÑ(LÑMÐPSÑSˆØŸš™œ×*Ò*­5¬;Ñ7Ô7ˆØ ×!4Ò!4Ñ!6Ô!6Ñ6ˆÝ”{ =°1Ò#4µeÔ6FÀ|Ñ6TÔ6TÐVbÑcÔcˆÝœ M°AÒ$5µuÔ7GÈÑ7VÔ7VÐXeÑfÔfˆÝ”{ =°F¸Q±JÒ#>ÅÄÐP\Ñ@]Ô@]Ð_kÑlÔlˆÝœØ˜V a™ZÒ'­¬¸ÈÐQRÉ
Ñ)SÔ)SÐUbñ
ô 
ˆð &¨Ñ,¨sÑ2×9Ò9Ñ;Ô;×>Ò>½u¼{ÑKÔKˆØ˜MÑ)ˆ
à—k’k ! SÑ)Ô)×,Ò,­U¬[Ñ9Ô9ˆØ!—n’n¥U¤[Ñ1Ô1ˆØ ×%Ò%Ñ'Ô'ˆØ" QÑ&×,Ò,Ñ.Ô.ˆ	Ø×$Ò$Ñ&Ô&ˆØ# aÑ'×-Ò-Ñ/Ô/ˆ
à$ Q Q Q¨°°°°4°Ô(8¸(À4ÈÈÈÀ7Ô:KÐ%KÔLˆØ% a a a¨°°°°D°Ô)9¸9ÀTÈ1È1È1ÀWÔ;MÐ&MÔNˆØ'¨¨¨¨:°a°a°a¸°gÔ+>ÀÈÈqÈqÈqÈÔ@QÐ(QÔRÐØ(¨¨¨¨J°q°q°q¸$°wÔ,?ÀÈ4ÐQRÐQRÐQRÈ7ÔASÐ)SÔTÐà(×-Ò-¨a°ÀÑBÔBÐØ"Ÿš¨¨=¸!Ñ<Ô<ˆØ&×+Ò+¨A¨q°,Ñ?Ô?ˆØ$×)Ò)¨!¨Q°Ñ=Ô=ˆØØ˜^Ñ+¨oÀÑ.OÑOñ
à Ð1BÑ BÀ_ÐWiÑEiÑ iÑjñkˆð ˜GÑ$¨Ñ+ˆØ—’˜a Ñ%Ô%×(Ò(­¬Ñ5Ô5ˆà�{Š{˜: x°ÀÑMÔM×PÒPÐW\ÔWbÐPÑcÔcÐcr-   ÚimagesÚ	do_resizeÚresamplez"tvF.InterpolationMode | int | NoneÚdo_center_cropÚ	crop_sizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚdo_padÚpad_sizeÚdisable_groupingÚreturn_tensorsc           	      óZ  — |�(t          ¦   «         st                               d¦  «         t          ||¬¦  «        \  }}i }|                     ¦   «         D ]#\  }}|r|                      ||¬¦  «        }|||<   Œ$t          ||¦  «        }t          ||¬¦  «        \  }}i }|                     ¦   «         D ]<\  }}|r|                      ||¦  «        }|                      ||||	|
|¦  «        }|||<   Œ=t          ||¦  «        }|r|  	                    |||¬¦  «        }t          d|i|¬¦  «        S )Nz&Resampling is not supported in SLANeXt)r&  )r†   r¾   )r%  r&  r…   )ÚdataÚtensor_type)r   ÚloggerÚwarning_oncer   Úitemsr  r   Úcenter_cropÚrescale_and_normalizeÚpadr   )rE   r  r  r¾   r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  rF   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedrÂ   Ústacked_imagesÚresized_imagesÚprocessed_images_groupedÚprocessed_imagess                            r.   Ú_preprocessz!SLANeXtImageProcessor._preprocess‰  sŒ  € ð& ÐÕ(@Ñ(BÔ(BÐÝ×ÒÐ HÑIÔIÐIõ 0EÀVÐ^nÐ/oÑ/oÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ò%9Ñ%;Ô%;ð 	;ð 	;Ñ!ˆE�>Øð OØ!%§¢°NÈ Ñ!NÔ!N�Ø,:Ð" 5Ñ)Ð)Ý'Ð(>Ð@TÑUÔUˆõ 0EÀ^ÐfvÐ/wÑ/wÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ò%9Ñ%;Ô%;ð 	=ð 	=Ñ!ˆE�>Øð MØ!%×!1Ò!1°.À)Ñ!LÔ!L�à!×7Ò7Ø 
¨N¸LÈ*ÐV_ñô ˆNð /=Ð$ UÑ+Ð+Ý)Ð*BÐDXÑYÔYÐàð 	pØ#ŸxšxÐ(8À8Ð^n˜xÑoÔoÐå .Ð2BÐ!CÐQ_Ð`Ñ`Ô`Ð`r-   rF   c                 ób   •—  t          ¦   «         j        di |¤Ž |                      ¦   «          d S r?   )rB   rR   Úinit_decoderrD   s     €r.   rR   zSLANeXtImageProcessor.__init__»  s8   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø×ÒÑÔÐÐÐr-   c                 óš  — g d¢}|d„ t          d¦  «        D ¦   «         z  }|d„ t          d¦  «        D ¦   «         z  }d|vr|                     d¦  «         d|v r|                     d¦  «         dg|z   dgz   }d	„ t          |¦  «        D ¦   «         | _        || _        g d
¢| _        | j        d         | _        | j        d         | _        dS )aÅ  
        Initialize the decoder vocabulary for table structure recognition.

        Builds a character dictionary mapping HTML table structure tokens (e.g., `<thead>`, `<tr>`, `<td>`, colspan/
        rowspan attributes) to integer indices. The dictionary includes special `"sos"` (start-of-sequence) and
        `"eos"` (end-of-sequence) tokens. Merged `<td></td>` tokens are used in place of standalone `<td>` tokens
        when applicable.
        )
z<thead>z</thead>z<tbody>z</tbody>z<tr>z</tr>ú<td>ú<tdú>z</td>c                 ó    — g | ]}d |dz   › d�‘ŒS )z
 colspan="r   ú"r,   ©Ú.0Úis     r.   ú
<listcomp>z6SLANeXtImageProcessor.init_decoder.<locals>.<listcomp>Ô  ó(   € ÐDÐDÐD°QÐ0¨¨A©Ð0Ð0Ð0ÐDÐDÐDr-   é   c                 ó    — g | ]}d |dz   › d�‘ŒS )z
 rowspan="r   r@  r,   rA  s     r.   rD  z6SLANeXtImageProcessor.init_decoder.<locals>.<listcomp>Õ  rE  r-   ú	<td></td>r<  ÚsosÚeosc                 ó   — i | ]\  }}||“Œ	S r,   r,   )rB  rC  Úchars      r.   ú
<dictcomp>z6SLANeXtImageProcessor.init_decoder.<locals>.<dictcomp>Ý  s   € ÐFÐFÐF¡  D�T˜1ÐFÐFÐFr-   )r<  r=  rH  N)	rÄ   rÈ   ÚremoveÚ	enumeraterA   Ú	characterÚtd_tokenÚbos_idÚeos_id)rE   Údict_characters     r.   r:  z"SLANeXtImageProcessor.init_decoder¿  sõ   € ð
ð 
ð 
ˆð 	ÐDÐD½%À¹)¼)ÐDÑDÔDÑDˆØÐDÐD½%À¹)¼)ÐDÑDÔDÑDˆà˜nÐ,Ð,Ø×!Ò! +Ñ.Ô.Ð.Ø�^Ð#Ð#Ø×!Ò! &Ñ)Ô)Ð)à˜ >Ñ1°U°GÑ;ˆØFÐF­I°nÑ,EÔ,EÐFÑFÔFˆŒ	Ø'ˆŒØ4Ð4Ð4ˆŒØ”i Ô&ˆŒØ”i Ô&ˆŒˆˆr-   c                 ó0  — |j         | _        | j        dd…         }t          | j        ¦  «        t          | j        ¦  «        g}t          | j        ¦  «        }|                     d¬¦  «        }|                     d¬¦  «        j        }g }|j        d         }t          |¦  «        D ]Ù}g }	g }
t          |j        d         ¦  «        D ]k}t          |||f         ¦  «        }|dk    r||k    r nE||v rŒ,| j
        |         }|	                     |¦  «         |
                     |||f         ¦  «         Œl|                     |	¦  «         t          j        |
¦  «                             ¦   «                              ¦   «         }ŒÚg d¢|d         z   g d¢z   }||dœS )aO  
        Post-process the raw model outputs to decode the predicted table structure into an HTML token sequence.

        Converts the model's predicted probability distributions over the structure vocabulary into a sequence of
        HTML tokens representing the table structure. The decoded tokens are wrapped with `<html>`, `<body>`, and
        `<table>` tags to form a complete HTML table structure.

        Args:
            outputs ([`SLANeXtForTableRecognitionOutput`]):
                Raw outputs from the SLANeXt model. The `last_hidden_state` field contains the predicted probability
                distributions over the structure vocabulary at each decoding step, with shape
                `(batch_size, max_text_length, num_classes)`.

        Returns:
            `dict`: A dictionary containing:
                - **structure** (`list[str]`): The predicted HTML table structure as a list of tokens, wrapped with
                  `<html>`, `<body>`, and `<table>` tags.
                - **structure_score** (`float`): The mean confidence score across all predicted tokens.
        r   rQ   r   r¿   )z<html>z<body>z<table>)z</table>z</body>z</html>)Ú	structureÚstructure_score)r³   Úpredr*   rR  rS  rÇ   rí   ÚvaluesrÂ   rÄ   rP  rÈ   rd   rÉ   ÚmeanÚitem)rE   ÚoutputsÚstructure_probsÚignored_tokensÚend_idxÚstructure_idxÚstructure_str_listrø   Úbatch_indexÚstructure_listÚ
score_listÚpositionÚchar_idxÚtextrW  rV  s                   r.   Úpost_process_table_recognitionz4SLANeXtImageProcessor.post_process_table_recognitionã  s»  € ð( Ô-ˆŒ	Øœ) A a Cœ.ˆÝ˜dœkÑ*Ô*­C°´Ñ,<Ô,<Ð=ˆÝ�d”kÑ"Ô"ˆà'×.Ò.°1Ð.Ñ5Ô5ˆØ)×-Ò-°!Ð-Ñ4Ô4Ô;ˆàÐØ"Ô(¨Ô+ˆ
Ý  Ñ,Ô,ð 	Dð 	DˆKØˆNØˆJÝ! -Ô"5°aÔ"8Ñ9Ô9ð Jð J�Ý˜}¨[¸(Ð-BÔCÑDÔD�Ø˜a’<�< H°Ò$7Ð$7Ø�EØ˜~Ð-Ð-ØØ”~ hÔ/�Ø×%Ò% dÑ+Ô+Ð+Ø×!Ò! /°+¸xÐ2GÔ"HÑIÔIÐIÐIØ×%Ò% nÑ5Ô5Ð5Ý#œk¨*Ñ5Ô5×:Ò:Ñ<Ô<×AÒAÑCÔCˆOˆOà3Ð3Ð3Ð6HÈÔ6KÑKÐNpÐNpÐNpÑpˆ	Ø&¸?ÐKÐKÐKr-   )r'   r(   r)   r  r   r"  r   r#  r¾   r%  Údo_convert_rgbr  r  r!  r$  r   r  ÚlistÚboolrÆ   Ústrr   r   r8  r   r   rR   r:  rh  rK   rL   s   @r.   ræ   ræ   9  sð  ø€ € € € € ð €HØ&€JØ$€IØ CÐ(Ð(€DØ¨Ð,Ð,€HØ€NØ€IØ€JØ€LØ€Fð@dàð@dð ð@dð 
ð	@dð @dð @dð @dðD0aà�^Ô$ð0að ð0að ð	0að
 7ð0að ð0að ð0að ð0að ð0að ð0að ˜D œKÑ'¨$Ñ.ð0að ˜4 œ;Ñ&¨Ñ-ð0að �t‘ð0að ˜T‘/ð0að  ™+ð0að  ˜jÑ(¨4Ñ/ð!0að$ 
ð%0að 0að 0að 0aðd ¨Ô!5ð ð ð ð ð ð ð"'ð "'ð "'ðH.Lð .Lð .Lð .Lð .Lð .Lð .Lr-   ræ   )ræ   r4   r™   r¨   rÜ   r‚   )Mr’   Údataclassesr   rd   Útorch.nnrS   Útorch.nn.functionalÚ
functionalrf   Ú$torchvision.transforms.v2.functionalÚ
transformsÚv2ÚtvFÚhuggingface_hub.dataclassesr   Ú r   r�   Úactivationsr   Úbackbone_utilsr   Úconfiguration_utilsr	   Úimage_processing_backendsr
   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr   r   r   Úmodeling_outputsr   Úmodeling_utilsr   Úprocessing_utilsr   r   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.import_utilsr   Úutils.output_capturingr   Úgot_ocr2.configuration_got_ocr2r   Úgot_ocr2.modeling_got_ocr2r    r!   Ú
get_loggerr'   r+  r$   r0   r4   ÚModulerN   rx   r‚   r‹   r¨   r™   r×   rÜ   ræ   Ú__all__r,   r-   r.   ú<module>rŠ     s	  ðð  €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø .Ð .Ð .Ð .Ð .Ð .à &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ /Ð /Ð /Ð /Ð /Ð /Ø -Ð -Ð -Ð -Ð -Ð -Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lØ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ *Ð *Ð *Ð *Ð *Ð *Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð ð ð 
ˆÔ	˜HÑ	%Ô	%€ð €ÐCÐDÑDÔDØðð ð ð ð Ð-ñ ô ñ „ñ EÔDðð	ð 	ð 	ð 	ð 	Ð3ñ 	ô 	ð 	ð €ÐCÐDÑDÔDØð (ð  (ð  (ð  (ð  (Ð$ñ  (ô  (ñ „ñ EÔDð (ðF+ð +ð +ð +ð +˜bœiñ +ô +ð +ðBð ð ð ð �”ñ ô ð ð+Að +Að +Að +Að +A˜_ñ +Aô +Að +Að\	ð 	ð 	ð 	ð 	Ð/ñ 	ô 	ð 	ð
ð 
ð 
ð 
ð 
Ð,ñ 
ô 
ð 
ð01fð 1fð 1fð 1fð 1fÐ+ñ 1fô 1fð 1fðh Ø
ð	5ð 	5ð 	5ð 	5ð 	5 ñ 	5ô 	5ñ „ñ „ð	5ð €ððñ ô ð
ð 
ð 
ð 
ð 
Ð!7ñ 
ô 
ñô ð
ð. Ø	€�:ÐÑÔðVLð VLð VLð VLð VLÐ.ñ VLô VLñ Ôñ „ðVLðrð ð €€€r-   