Ë
    ÜÓ^j²[  ã                   óD  — 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/jx                  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j„                  «      ZC G d!„ d"ej„                  «      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¢ZLy)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<   y)ÚSLANeXtVisionConfigé   Ú
image_sizeN)Ú__name__Ú
__module__Ú__qualname__r&   ÚintÚ__annotations__© ó    úv/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/slanext/modular_slanext.pyr$   r$   2   s   … ð €J�Ôr-   r$   c                   ó   — e Zd Zy)ÚSLANeXtVisionAttentionN©r'   r(   r)   r,   r-   r.   r0   r0   8   ó   „ Ør-   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        «       | _         n4t        | j                   t        «      rt        di | j                   ¤Ž| _         t	        ‰| �  di |¤Ž y ©Nr,   )r6   r$   Ú
isinstanceÚdictÚsuperÚ__post_init__©ÚselfÚkwargsÚ	__class__s     €r.   rC   zSLANeXtConfig.__post_init__Y   sP   ø€ Ø×ÑÐ%Ü!4Ó!6ˆDÕÜ˜×*Ñ*¬DÔ1Ü!4Ñ!J°t×7IÑ7IÑ!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   <   sm   ø… ñð  €JØ"Ð$7Ð8€Kà7;€M�4Ð-Ñ-°Ñ4Ó;Ø!$Ð˜3Ó$Ø"%Ð˜CÓ%Ø€L�#ÓØ€K�ÓØ€O�SÓ÷(ð (r-   r4   c            	       óx   ‡ — 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   |«      | _        y )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   sa   ø€ Ü‰ÑÔä!Ÿy™y¨°[ÀuÔMˆÔÜ "§	¡	¨+°{Ó CˆÔÜ—Y‘Y˜{¨A°EÔ:ˆŒ
ä—:‘:˜j¨>Ñ9¸;ÓGˆ�r-   Úprev_hiddenÚbatch_hiddenÚchar_onehotsrF   c                 ó  — | j                  |«      }| j                  |«      j                  d«      }||z   }t        j                  |«      }| j                  |«      }t        j                  |dt        j                  ¬«      j                  |j                  «      }|j                  dd«      }t        j                  ||«      j                  d«      }	t        j                  |	|gd«      }
| j                  |
|«      }||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Ðà,Ð/?Ñ?ÐÜ Ÿ:™:Ð&6Ó7ÐØŸ:™:Ð&6Ó7Ðä—y‘yÐ!1°qÄÇÁÔN×QÑQÐRb×RhÑRhÓiˆØ#×-Ñ-¨a°Ó3ˆÜ—,‘,˜|¨\Ó:×BÑBÀ1ÓEˆÜŸ™ G¨\Ð#:¸AÓ>ˆØŸ™ °Ó=ˆà˜lÐ*Ð*r-   )
r'   r(   r)   rR   rd   ÚFloatTensorr   r   ru   rK   rL   s   @r.   rN   rN   a   sL   ø„ ôHð+à×&Ñ&ð+ð ×'Ñ'ð+ð ×'Ñ'ð	+ð
 Ð+Ñ,÷+r-   rN   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú
SLANeXtMLPc                 óê   •— t         ‰| �  «        t        j                  ||«      | _        t        j                  ||«      | _        |€t        j                  «       | _        y t        |   «       | _        y ©N)	rB   rR   rS   rT   Úfc1Úfc2ÚIdentityr   Úact_fn)rE   r<   r;   Ú
activationrG   s       €r.   rR   zSLANeXtMLP.__init__ƒ   sR   ø€ Ü‰ÑÔÜ—9‘9˜[¨+Ó6ˆŒÜ—9‘9˜[¨,Ó7ˆŒØ'1Ð'9”b—k‘k“mˆ�¼wÀzÑ?RÓ?Tˆ�r-   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rz   )r{   r|   r~   )rE   rt   s     r.   ru   zSLANeXtMLP.forward‰   s2   € ØŸ™ Ó/ˆØŸ™ Ó/ˆØŸ™ MÓ2ˆØÐr-   rz   )r'   r(   r)   rR   ru   rK   rL   s   @r.   rx   rx   ‚   s   ø„ õUör-   rx   c                   ój   ‡ — 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                 óÔ  •— t         ‰| �  |«       t        |t        «      r,|j                  � t        j                  |j                  d«       t        |t        «      rL|j                  r@t        j                  |j                  d«       t        j                  |j                  d«       t        |t        j                  «      rÓ|j                  dkD  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 ]ƒ  }|j1                  «       D ]n  }t        |t        j2                  «      sŒt        j                   |j4                  | |«       |j6                  €ŒMt        j                   |j6                  | |«       Œp Œ… yy)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Ø×ÑÐ+Ü—‘˜v×/Ñ/°Ô5ô �fÔ4Ô5Ø×!Ò!Ü—‘˜v×/Ñ/°Ô5Ü—‘˜v×/Ñ/°Ô5ô �fœbŸj™jÔ)Ø9?×9KÑ9KÈaÒ9O�#œŸ	™	 &×"4Ñ"4Ó5Ò5ÐUVˆCÜ�M‰M˜&×*Ñ*¨S¨D°#Ô6Ü�M‰M˜&×*Ñ*¨S¨D°#Ô6Ø�~‰~Ð)Ü—‘˜fŸn™n¨s¨d°CÔ8Ø�~‰~Ð)Ü—‘˜fŸn™n¨s¨d°CÔ8ô �fœnÔ-ØœŸ	™	 $§+¡+×"9Ñ"9¸CÑ"?Ó@Ñ@ˆCà$×8Ñ8Ð:ò A�	Ø&×/Ñ/Ó1ò A�EÜ! %¬¯©Õ3ÜŸ™ e§l¡l°S°D¸#Ô>Ø Ÿ:™:Ñ1Ü ŸM™M¨%¯*©*°s°d¸CÕ@ñ	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‚   �   sH   ø… ØÓØ"ÐØ$€OØ!ÐØ&*Ð#Ø$>Ð@UÐ#VÐ à€U‡]�]ƒ_ó"Aó ô"Ar-   r‚   c                   ó   — e Zd Zy)r‹   Nr1   r,   r-   r.   r‹   r‹   ¾   r2   r-   r‹   c                   óX   ‡ — 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¬«      | _	        | j                  «        y )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__Ã   s^   ø€ ô
 	‰Ñ˜Ô Ü0°×1EÑ1EÓFˆÔÜŸ™Ø×(Ñ(¨&×*GÑ*GÐUVÐ_`ÐjkÐrwô
ˆŒð 	�‰Õr-   rt   rF   c                 óä   —  | j                   |fi |¤Ž}| j                  |j                  «      }|j                  d«      j	                  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Ï   sl   € Ø)˜×)Ñ)¨-ÑB¸6ÑBˆØŸ™ }×'FÑ'FÓGˆØ%×-Ñ-¨aÓ0×:Ñ:¸1¸aÓ@ˆÜØ+Ø'×5Ñ5Ø$×/Ñ/ô
ð 	
r-   rz   )r'   r(   r)   rA   rR   rd   ÚTensorr   r   ru   rK   rL   s   @r.   r¨   r¨   Â   s6   ø„ ð #ñ
à�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
                  «      | _        | j                  «        y rz   )
rB   rR   rN   r9   r<   r;   r‡   rx   rˆ   r°   r±   s      €r.   rR   zSLANeXtSLAHead.__init__ß   s_   ø€ ô
 	‰Ñ˜Ô ä(?Ø×)Ñ)¨6×+=Ñ+=¸v×?RÑ?Ró)
ˆÔ%ô $.¨f×.@Ñ.@À&×BUÑBUÓ#VˆÔ à�‰Õr-   rt   ÚtargetsrF   c                 ó6  — 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                  «      j                  «       }	| j                  ||j                  «       |	«      \  }}| j                  |«      }
|
j!                  d¬«      }|j#                  |
«       |j#                  |«       t        j$                  |d¬«      j'                  | j                  j                  dz
  «      j)                  d«      j+                  «       sŒÿ n t        j,                  t        j$                  |d¬«      dt         j
                  ¬«      j/                  |j0                  «      }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Ñ[oô
ˆô  Ÿ+™+¨M×,?Ñ,?ÀÑ,BÐ+CÌ5Ï:É:Ð^k×^rÑ^rÔsˆà!ÐØÐÜ�t—{‘{×2Ñ2°QÑ6Ó7ò 		ˆAÜ !§	¡	¨/¸4¿;¹;×;SÑ;SÓ T× ZÑ ZÓ \ÐØ×7Ñ7¸À-×BUÑBUÓBWÐYjÓk‰KˆH�aØ!×5Ñ5°hÓ?ˆNØ,×3Ñ3¸Ð3Ó:ˆOà ×'Ñ'¨Ô7Ø×%Ñ% oÔ6Ü�{‰{Ð-°1Ô5×8Ñ8¸¿¹×9QÑ9QÐTUÑ9UÓV×ZÑZÐ[]Ó^×bÑbÕdÙð		ô Ÿ)™)¤E§K¡KÐ0DÈ!Ô$LÐRTÔ\a×\iÑ\iÔj×mÑmØ×Ñó
ˆô °ÐPdÔ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r-   r™   c                   ób   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   y)Ú 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×     s4   … ñð 48Ð˜×)Ñ)¨DÑ0Ó7Ø04€O�U×&Ñ&¨Ñ-Ô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	        |¬«      | _        | j                  «        y )N)rƒ   )rB   rR   r¨   r„   r™   Úheadr°   )rE   rƒ   rG   s     €r.   rR   z#SLANeXtForTableRecognition.__init__#  s2   ø€ Ü‰Ñ˜Ô Ü'¨vÔ6ˆŒÜ"¨&Ô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‘yÐ!1×!CÑ!CÑNÀvÑNˆÜ/Ø*×<Ñ<Ø*×8Ñ8Ø'×2Ñ2Ø+×9Ñ9Ø(×3Ñ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                 ón
  — |j                   \  }}}}|j                  ||z  ||«      }|j                  }t        |j                  |j
                  «      t        ||«      z  }t        ||z  «      }	t        ||z  «      }
t        j                  |
t        j                  |¬«      }|dz   t        |«      t        |
«      z  z  dz
  }|j                  «       j                  t        j                  «      }||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   j                  «       j                  t        j                  «      }d|z
  }t        j                  |	t        j                  |¬«      }|dz   t        |«      t        |	«      z  z  dz
  }|j                  «       j                  t        j                  «      }||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   j                  «       j                  t        j                  «      }d|z
  }|j%                  dd«      j                  t        j&                  «      }|j                  t        j                  «      }|j)                  «       }|dz   j)                  «       }|j)                  «       }|dz   j)                  «       }|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   } |j                  d|	d«      }!|j                  d|	d«      }"|j                  dd|
«      }#|j                  dd|
«      }$|"|$|z  |#|z  z   z  |!|$|z  |#| z  z   z  z   }%|%dz   d	z	  }%|%j%                  dd«      j                  t        j&                  «      }&|&j                  |||	|
«      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  s½  € ð
 /4¯k©kÑ+ˆ
�H˜f eØ—
‘
˜:¨Ñ0°&¸%Ó@ˆà—‘ˆä�D—K‘K §¡Ó,¬s°6¸5Ó/AÑAˆÜ˜f u™nÓ-ˆÜ˜U U™]Ó+ˆä—\‘\ ,´e·m±mÈFÔSˆ
Ø Ñ#¬¨e«´u¸\Ó7JÑ(JÑKÈcÑQˆØŸ™›×*Ñ*¬5¯;©;Ó7ˆØ ×!4Ñ!4Ó!6Ñ6ˆä—{‘{ =°1Ñ#4´e×6FÑ6FÀ|Ó6TÐVbÓcˆÜŸ™ M°AÑ$5´u×7GÑ7GÈÓ7VÐXeÓfˆÜ—{‘{ =°E¸A±IÑ#=¼u¿¹È|Ó?\Ð^jÓkˆÜŸ™Ø˜U Q™YÑ&¬¯©¸ÀuÈqÁyÓ(QÐS`ó
ˆð % tÑ+¨cÑ1×8Ñ8Ó:×=Ñ=¼e¿k¹kÓJˆØ˜\Ñ)ˆä—\‘\ -´u·}±}ÈVÔTˆ
Ø Ñ#¬¨f«¼¸mÓ8LÑ(LÑMÐPSÑSˆØŸ™›×*Ñ*¬5¯;©;Ó7ˆØ ×!4Ñ!4Ó!6Ñ6ˆÜ—{‘{ =°1Ñ#4´e×6FÑ6FÀ|Ó6TÐVbÓcˆÜŸ™ M°AÑ$5´u×7GÑ7GÈÓ7VÐXeÓfˆÜ—{‘{ =°F¸Q±JÑ#>ÄÇÁÐP\Ó@]Ð_kÓlˆÜŸ™Ø˜V a™ZÑ'¬¯©¸ÈÐQRÉ
Ó)SÐUbó
ˆð &¨Ñ,¨sÑ2×9Ñ9Ó;×>Ñ>¼u¿{¹{ÓKˆØ˜MÑ)ˆ
à—k‘k ! SÓ)×,Ñ,¬U¯[©[Ó9ˆØ!—n‘n¤U§[¡[Ó1ˆØ ×%Ñ%Ó'ˆØ" QÑ&×,Ñ,Ó.ˆ	Ø×$Ñ$Ó&ˆØ# aÑ'×-Ñ-Ó/ˆ
à$¢Q¨²°4°Ñ(8¸(À4ÊÀ7Ñ:KÐ%KÑLˆØ%¢a¨²°D°Ñ)9¸9ÀTÊ1ÀWÑ;MÐ&MÑNˆØ'ª¨:²a¸°gÑ+>ÀÈÊqÈÑ@QÐ(QÑRÐØ(ª¨J²q¸$°wÑ,?ÀÈ4ÒQRÈ7ÑASÐ)SÑTÐà(×-Ñ-¨a°ÀÓBÐØ"Ÿ™¨¨=¸!Ó<ˆØ&×+Ñ+¨A¨q°,Ó?ˆØ$×)Ñ)¨!¨Q°Ó=ˆØØ˜^Ñ+¨oÀÑ.OÑOñ
à Ð1BÑ BÀ_ÐWiÑEiÑ iÑjñkˆð ˜GÑ$¨Ñ+ˆØ—‘˜a Ó%×(Ñ(¬¯©Ó5ˆà�{‰{˜: x°ÀÓM×PÑPÐW\×WbÑWbÐPÓ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           	      óø  — |�t        «       st        j                  d«       t        ||¬«      \  }}i }|j	                  «       D ]  \  }}|r| j                  ||¬«      }|||<   Œ! t        ||«      }t        ||¬«      \  }}i }|j	                  «       D ]4  \  }}|r| j                  ||«      }| j                  ||||	|
|«      }|||<   Œ6 t        ||«      }|r| j                  |||¬«      }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Ü×ÑÐ HÔIô 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ó%;ò 	;Ñ!ˆE�>ÙØ!%§¡°NÈ Ó!N�Ø,:Ð" 5Ò)ð	;ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>ÙØ!%×!1Ñ!1°.À)Ó!L�à!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð /=Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐáØ#Ÿx™xÐ(8À8Ð^n˜xÓoÐä .Ð2BÐ!CÐQ_Ô`Ð`r-   rF   c                 óD   •— t        ‰| �  di |¤Ž | j                  «        y r?   )rB   rR   Úinit_decoderrD   s     €r.   rR   zSLANeXtImageProcessor.__init__»  s   ø€ Ü‰ÑÑ"˜6Ò"Ø×ÑÕr-   c                 óØ  — g d¢}|t        d«      D �cg c]  }d|dz   › d�‘Œ c}z  }|t        d«      D �cg c]  }d|dz   › d�‘Œ c}z  }d|vr|j                  d«       d|v r|j                  d«       d	g|z   d
gz   }t        |«      D ��ci c]  \  }}||“Œ
 c}}| _        || _        g d¢| _        | j                  d	   | _        | j                  d
   | _        yc c}w c c}w c c}}w )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>é   z
 colspan="r   ú"z
 rowspan="ú	<td></td>r<  ÚsosÚeos)r<  r=  rA  N)	rÄ   rÈ   ÚremoveÚ	enumeraterA   Ú	characterÚtd_tokenÚbos_idÚeos_id)rE   Údict_characterÚiÚchars       r.   r:  z"SLANeXtImageProcessor.init_decoder¿  sò   € ò
ˆð 	¼%À»)ÖD°Q˜Z¨¨A© w¨aÒ0ÒDÑDˆØ¼%À»)ÖD°Q˜Z¨¨A© w¨aÒ0ÒDÑDˆà˜nÑ,Ø×!Ñ! +Ô.Ø�^Ñ#Ø×!Ñ! &Ô)à˜ >Ñ1°U°GÑ;ˆÜ,5°nÓ,E×F¡  D�T˜1‘WÓFˆŒ	Ø'ˆŒÚ4ˆŒØ—i‘i Ñ&ˆŒØ—i‘i Ñ&ˆ�ùò EùÚDùó Gs   “C¶C!ÂC&c                 óú  — |j                   | _        | j                  dd }t        | j                  «      t        | j                  «      g}t        | j                  «      }|j                  d¬«      }|j                  d¬«      j                  }g }|j                  d   }t        |«      D ]¼  }g }	g }
t        |j                  d   «      D ]Y  }t        |||f   «      }|dkD  r||k(  r n=||v rŒ$| j                  |   }|	j                  |«       |
j                  |||f   «       Œ[ |j                  |	«       t        j                  |
«      j                  «       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*   rH  rI  rÇ   rí   ÚvaluesrÂ   rÄ   rF  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ÚtextrO  rN  s                   r.   Úpost_process_table_recognitionz4SLANeXtImageProcessor.post_process_table_recognitionã  s„  € ð( ×-Ñ-ˆŒ	ØŸ)™) A a˜.ˆÜ˜dŸk™kÓ*¬C°·±Ó,<Ð=ˆÜ�d—k‘kÓ"ˆà'×.Ñ.°1Ð.Ó5ˆØ)×-Ñ-°!Ð-Ó4×;Ñ;ˆàÐØ"×(Ñ(¨Ñ+ˆ
Ü  Ó,ò 	DˆKØˆNØˆJÜ! -×"5Ñ"5°aÑ"8Ó9ò J�Ü˜}¨[¸(Ð-BÑCÓD�Ø˜a’< H°Ò$7ÙØ˜~Ñ-ØØ—~‘~ hÑ/�Ø×%Ñ% dÔ+Ø×!Ñ! /°+¸xÐ2GÑ"HÕIðJð ×%Ñ% nÔ5Ü#Ÿk™k¨*Ó5×:Ñ:Ó<×AÑAÓC‰Oð	Dò 4Ð6HÈÑ6KÑKÒNpÑpˆ	Ø&¸?Ñ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:  r`  rK   rL   s   @r.   ræ   ræ   9  st  ø„ ð €HØ&€JØ$€IØ CÑ(€DØ¨Ñ,€HØ€NØ€IØ€JØ€LØ€Fð@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ðd ¨Ñ!5õ ò"'öH.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Ý .å &Ý "Ý 9Ý 3Ý ;Ý 2ß Eß PÑ PÝ /Ý -ß 4ß lÕ lß CÝ *Ý 5Ý A÷ð 
ˆ×	Ñ	˜HÓ	%€ñ ÐCÔDØôÐ-ó ó ó Eðô	Ð3ô 	ñ ÐCÔDØô (Ð$ó  (ó ó Eð (ôF+˜bŸi™iô +ôB�—‘ô ô+A˜_ô +Aô\	Ð/ô 	ô
Ð,ô 
ô01fÐ+ô 1fðh Ø
ô	5 ó 	5ó ó ð	5ñ ðôô
Ð!7ó 
óð
ð. Ù	�:ÔôVLÐ.ó VLó ó ðVLòr�r-   