§
    ‚ŠtjH  ã                   ó°  — 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
Z ddlmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
l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$  G d„ de¦  «        Z%ee G d„ de¦  «        ¦   «         ¦   «         Z& G d„ dej'        ¦  «        Z( G d„ dej'        ¦  «        Z) G d„ de%¦  «        Z* G d„ dej'        ¦  «        Z+ G d„ de¦  «        Z, G d„ dej'        ¦  «        Z- G d „ d!ej'        ¦  «        Z. G d"„ d#ej'        ¦  «        Z/ G d$„ d%e%¦  «        Z0 ed&¬'¦  «         G d(„ d)e%¦  «        ¦   «         Z1g d*¢Z2dS )+é    N)Ú	dataclassé   )Úinitialization)ÚACT2CLSÚACT2FN)Úfilter_output_hidden_statesÚload_backbone)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithNoAttention)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚSLANetConfigc                   óh   ‡ — e Zd ZU eed<   dZdZdZdZg Z	 e
j        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚSLANetPreTrainedModelÚconfigÚbackboneÚpixel_values)ÚimageTc                 ó8  •— t          ¦   «                              |¦  «         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 weightsr   g      ð?N)ÚsuperÚ_init_weightsÚ
isinstanceÚnnÚGRUCellÚhidden_sizeÚmathÚsqrtÚinitÚuniform_Ú	weight_ihÚ	weight_hhÚbias_ihÚbias_hhÚSLANetSLAHeadr   Ústructure_generatorÚchildrenÚLinearÚweightÚbias)ÚselfÚmoduleÚstdÚ	generatorÚlayerÚ	__class__s        €úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/slanet/modeling_slanet.pyr   z#SLANetPreTrainedModel._init_weights2   s¢  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%õ �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�mÑ,Ô,ð 	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ó    )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_keep_in_fp32_modules_strictÚtorchÚno_gradr   Ú__classcell__©r6   s   @r7   r   r   *   s~   ø€ € € € € € ØÐÐÑØ"ÐØ$€OØ!ÐØ&*Ð#Ø#%Ð à€U„]�_„_ðAð Að Að Añ „_ðAð Að Að Að Ar8   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 )ÚSLANetForTableRecognitionOutputak  
    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 SLANetSLAHead 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 SLANetSLAHead at each prediction step, varies up to max `self.config.max_text_length` attentions (depending on early exits).
    NÚhead_hidden_statesÚhead_attentions)	r9   r:   r;   Ú__doc__rH   rB   ÚFloatTensorr<   rI   © r8   r7   rG   rG   M   sO   € € € € € € ðð ð 48Ð˜Ô)¨DÑ0Ð7Ð7Ñ7Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ð4Ð4r8   rG   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 )ÚSLANetAttentionGRUCellc                 ó&  •— t          ¦   «                              ¦   «          t          j        ||d¬¦  «        | _        t          j        ||¦  «        | _        t          j        |dd¬¦  «        | _        t          j        ||z   |¦  «        | _        d S )NF)r0   r   )	r   Ú__init__r    r.   Úinput_to_hiddenÚhidden_to_hiddenÚscorer!   Úrnn)r1   Ú
input_sizer"   Únum_embeddingsr6   s       €r7   rP   zSLANetAttentionGRUCell.__init__\   sz   ø€ Ý‰Œ×ÒÑÔÐå!œy¨°[ÀuÐMÑMÔMˆÔÝ "¤	¨+°{Ñ CÔ CˆÔÝ”Y˜{¨A°EÐ:Ñ:Ô:ˆŒ
å”:˜j¨>Ñ9¸;ÑGÔGˆŒˆˆr8   Úprev_hiddenÚbatch_hiddenÚchar_onehotsÚkwargsc                 ó(  — |                       |¦  «        }|                      |¦  «                             d¦  «        }||z   }t          j        |¦  «        }|                      |¦  «        }t          j        |dt          j        ¬¦  «         	                    |j
        ¦  «        }|                     dd¦  «        }t          j        ||¦  «                             d¦  «        }	t          j        |	|gd¦  «        }
|                      |
|¦  «        }||fS )Nr   ©ÚdimÚdtypeé   )rQ   rR   Ú	unsqueezerB   ÚtanhrS   ÚFÚsoftmaxÚfloat32Útor^   Ú	transposeÚmatmulÚsqueezeÚcatrT   )r1   rW   rX   rY   rZ   Úbatch_hidden_projÚprev_hidden_projÚattention_scoresÚattn_weightsÚcontextÚconcat_contextÚhidden_statess               r7   ÚforwardzSLANetAttentionGRUCell.forwarde   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Ð*Ð*r8   )
r9   r:   r;   rP   rB   rK   r   r   rq   rD   rE   s   @r7   rN   rN   [   s†   ø€ € € € € ðHð Hð Hð Hð Hð+àÔ&ð+ð Ô'ð+ð Ô'ð	+ð
 Ð+Ô,ð+ð +ð +ð +ð +ð +ð +ð +r8   rN   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú	SLANetMLPNc                 ó  •— t          ¦   «                              ¦   «          t          j        ||¦  «        | _        t          j        ||¦  «        | _        |€t          j        ¦   «         nt          |         ¦   «         | _        d S ©N)	r   rP   r    r.   Úfc1Úfc2ÚIdentityr   Úact_fn)r1   r"   Úout_channelsÚ
activationr6   s       €r7   rP   zSLANetMLP.__init__}   sd   ø€ Ý‰Œ×ÒÑÔÐÝ”9˜[¨+Ñ6Ô6ˆŒÝ”9˜[¨,Ñ7Ô7ˆŒØ'1Ð'9•b”k‘m”m�m½wÀzÔ?RÑ?TÔ?TˆŒˆˆr8   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ru   )rv   rw   ry   ©r1   rp   s     r7   rq   zSLANetMLP.forwardƒ   s;   € ØŸš Ñ/Ô/ˆØŸš Ñ/Ô/ˆØŸš MÑ2Ô2ˆØÐr8   ru   )r9   r:   r;   rP   rq   rD   rE   s   @r7   rs   rs   |   sR   ø€ € € € € ðUð Uð Uð Uð Uð Uðð ð ð ð ð ð r8   rs   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+   Ú
attentionsNr   c                 óú   •— t          ¦   «                              |¦  «         t          |j        |j        |j        ¦  «        | _        t          |j        |j        ¦  «        | _        |  	                    ¦   «          d S ru   )
r   rP   rN   Úpost_conv_out_channelsr"   rz   Ústructure_attention_cellrs   r,   Ú	post_init)r1   r   rZ   r6   s      €r7   rP   zSLANetSLAHead.__init__�   so   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð å(>ØÔ)¨6Ô+=¸vÔ?Rñ)
ô )
ˆÔ%õ $-¨VÔ-?ÀÔATÑ#UÔ#UˆÔ à�ŠÑÔÐÐÐr8   rp   ÚtargetsrZ   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   )r^   Údevice)Úsizer^   r†   r   ©r]   éÿÿÿÿr\   ©Úlast_hidden_staterp   )rB   ÚzerosÚshaper   r"   rd   r†   ÚlongÚrangeÚmax_text_lengthrb   Úone_hotrz   Úfloatr‚   r,   ÚargmaxÚappendÚstackÚeqÚanyÚallrc   re   r^   r   )r1   rp   r„   rZ   ÚfeaturesÚpredicted_charsÚstructure_preds_listÚstructure_ids_listÚ_Úembedding_featureÚstructure_stepÚstructure_predss               r7   rq   zSLANetSLAHead.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Ðer8   ru   )r9   r:   r;   rN   Ú_can_record_outputsÚdictrP   r   r   r   rB   rK   ÚTensorr   r   rq   rD   rE   s   @r7   r+   r+   Š   sÙ   ø€ € € € € àÐ,ðÐð #ðð à�t‘ðð ð ð ð ð ð  ØØ ð (,ðfð fàÔ(ðfð ” Ñ$ðfð Ð+Ô,ð	fð fð fñ !Ô ñ „_ñ  Ôðfð fð fð fð fr8   r+   c                   óˆ   ‡ — e Zd Z	 	 	 	 	 	 ddedededed	ed
eeeef         z  dedefˆ fd„Zdej	        dej	        fd„Z
ˆ xZS )ÚSLANetConvLayerr   r   FÚ	hardswishÚin_channelsrz   Úkernel_sizeÚstrider0   ÚdilationÚgroupsr{   c	           
      ó  •— t          ¦   «                              ¦   «          t          j        |||||dz  |||¬¦  «        | _        t          j        |¦  «        | _        |�t          |         nt          j        ¦   «         | _	        d S )Nr_   )r§   rz   r¨   r©   Úpaddingr0   rª   r«   )
r   rP   r    ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationr   rx   r{   )
r1   r§   rz   r¨   r©   r0   rª   r«   r{   r6   s
            €r7   rP   zSLANetConvLayer.__init__¿   s…   ø€ õ 	‰Œ×ÒÑÔÐÝœ9Ø#Ø%Ø#ØØ 1Ñ$ØØØð	
ñ 	
ô 	
ˆÔõ  œ^¨LÑ9Ô9ˆÔØ0:Ð0F�& Ô,Ð,ÍBÌKÉMÌMˆŒˆˆr8   rp   Úreturnc                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ru   )r¯   r±   r{   r}   s     r7   rq   zSLANetConvLayer.forwardØ   s?   € Ø×(Ò(¨Ñ7Ô7ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš¨Ñ6Ô6ˆØÐr8   )r   r   Fr   r   r¦   )r9   r:   r;   ÚintÚboolÚtupleÚstrrP   rB   r£   rq   rD   rE   s   @r7   r¥   r¥   ¾   sæ   ø€ € € € € ð
 ØØØ*+ØØ%ðZð ZàðZð ðZð ð	Zð
 ðZð ðZð ˜˜c 3˜hœÑ'ðZð ðZð ðZð Zð Zð Zð Zð Zð2 U¤\ð °e´lð ð ð ð ð ð ð ð r8   r¥   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú!SLANetDepthwiseSeparableConvLayerzæ
    Depthwise Separable Convolution Layer: Depthwise Conv -> Pointwise Conv
    Core component of lightweight models (e.g., MobileNet, PP-LCNet) that significantly reduces
    the number of parameters and computational cost.
    c                 óò   •— t          ¦   «                              ¦   «          t          ||||||j        ¬¦  «        | _        t          j        ¦   «         | _        t          |d|d|j        ¬¦  «        | _        d S )N)r§   rz   r¨   r©   r«   r{   r   )r§   r¨   rz   r©   r{   )	r   rP   r¥   Ú
hidden_actÚdepthwise_convolutionr    rx   Úsqueeze_excitation_moduleÚpointwise_convolution)r1   r§   rz   r©   r¨   r   r6   s         €r7   rP   z*SLANetDepthwiseSeparableConvLayer.__init__æ   s†   ø€ õ 	‰Œ×ÒÑÔÐÝ%4Ø#Ø$Ø#ØØØÔ(ð&
ñ &
ô &
ˆÔ"õ *,¬©¬ˆÔ&Ý%4Ø#ØØ%ØØÔ(ð&
ñ &
ô &
ˆÔ"Ð"Ð"r8   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ru   )r¼   r½   r¾   )r1   Úhidden_states     r7   rq   z)SLANetDepthwiseSeparableConvLayer.forward   sA   € Ø×1Ò1°,Ñ?Ô?ˆØ×5Ò5°lÑCÔCˆØ×1Ò1°,Ñ?Ô?ˆàÐr8   )r9   r:   r;   rJ   rP   rq   rD   rE   s   @r7   r¹   r¹   ß   sQ   ø€ € € € € ðð ð
ð 
ð 
ð 
ð 
ð4ð ð ð ð ð ð r8   r¹   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚSLANetBottleneckc                 óª   •— t          ¦   «                              ¦   «          t          ||d|¬¦  «        | _        t	          |||d|¬¦  «        | _        d S )Nr   ©r§   rz   r¨   r{   )r§   rz   r¨   r©   r   )r   rP   r¥   Úconv1r¹   Úconv2)r1   r§   rz   r¨   r{   r   r6   s         €r7   rP   zSLANetBottleneck.__init__	  sf   ø€ õ 	‰Œ×ÒÑÔÐÝ$Ø#°,ÈAÐZdð
ñ 
ô 
ˆŒ
õ 7Ø$Ø%Ø#ØØð
ñ 
ô 
ˆŒ
ˆ
ˆ
r8   rp   r²   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S ru   )rÅ   rÆ   r}   s     r7   rq   zSLANetBottleneck.forward  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸ
š
 =Ñ1Ô1ˆàÐr8   )r9   r:   r;   rP   rB   rK   rq   rD   rE   s   @r7   rÂ   rÂ     s`   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð( UÔ%6ð ¸5Ô;Lð ð ð ð ð ð ð ð r8   rÂ   c                   óP   ‡ — e Zd ZdZ	 	 	 	 d
ˆ fd„	Zdej        dej        fd	„Zˆ xZS )ÚSLANetCSPLayerz†
    Cross Stage Partial (CSP) network layer. Similar in structure to DFineCSPRepLayer, but with a different forward computation.
    r   ç      à?r   r¦   c                 ót  •‡‡‡‡— t          ¦   «                              ¦   «          t          ||z  ¦  «        Št          |‰d‰¬¦  «        | _        t          |‰d‰¬¦  «        | _        t          d‰z  |d‰¬¦  «        | _        t          j        ˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _
        d S )Nr   )r{   r_   c           	      ó6   •— g | ]}t          ‰‰‰‰‰¦  «        ‘ŒS rL   )rÂ   )Ú.0r�   r{   r   Úhidden_channelsr¨   s     €€€€r7   ú
<listcomp>z+SLANetCSPLayer.__init__.<locals>.<listcomp>9  s;   ø€ ð ð ð àõ ! °/À;ÐPZÐ\bÑcÔcðð ð r8   )r   rP   r´   r¥   rÅ   rÆ   Úconv3r    Ú
ModuleListr�   Úbottlenecks)
r1   r   r§   rz   r¨   Ú	expansionÚ
num_blocksr{   rÎ   r6   s
    `  `  `@€r7   rP   zSLANetCSPLayer.__init__)  sØ   øøøøø€ õ 	‰Œ×ÒÑÔÐÝ˜l¨YÑ6Ñ7Ô7ˆÝ$ [°/À1ÐQ[Ð\Ñ\Ô\ˆŒ
Ý$ [°/À1ÐQ[Ð\Ñ\Ô\ˆŒ
Ý$ Q¨Ñ%8¸,ÈÐV`ÐaÑaÔaˆŒ
Ýœ=ðð ð ð ð ð ð å˜zÑ*Ô*ðñ ô ñ
ô 
ˆÔÐÐr8   rp   r²   c                 óÞ   — |                       |¦  «        }|                      |¦  «        }| j        D ]} ||¦  «        }Œt          j        ||fd¬¦  «        }|                      |¦  «        }|S )Nr   rˆ   )rÅ   rÆ   rÒ   rB   ri   rÐ   )r1   rp   ÚresidualÚ
bottlenecks       r7   rq   zSLANetCSPLayer.forward?  sw   € Ø—:’:˜mÑ,Ô,ˆàŸ
š
 =Ñ1Ô1ˆØÔ*ð 	6ð 	6ˆJØ&˜J }Ñ5Ô5ˆMˆMåœ	 =°(Ð";ÀÐCÑCÔCˆØŸ
š
 =Ñ1Ô1ˆàÐr8   )r   rÊ   r   r¦   ©	r9   r:   r;   rJ   rP   rB   rK   rq   rD   rE   s   @r7   rÉ   rÉ   $  s}   ø€ € € € € ðð ð ØØØð
ð 
ð 
ð 
ð 
ð 
ð,
 UÔ%6ð 
¸5Ô;Lð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r8   rÉ   c                   óF   ‡ — e Zd ZdZˆ fd„Zdej        dej        fd„Zˆ xZS )ÚSLANetCSPPANz;
    CSP-PAN: Path Aggregation Network with CSP layers
    c                 óè  •‡‡‡‡‡‡— t          ¦   «                              ¦   «          ‰j        Š‰j        Š‰j        Š‰j        Št          j        ˆˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         ¦  «        | _
        t          j        dd¬¦  «        | _        t          j        ˆˆˆˆˆfd„t          t          ‰¦  «        dz
  dd¦  «        D ¦   «         ¦  «        | _        t          j        ˆˆˆfd	„t          t          ‰¦  «        dz
  ¦  «        D ¦   «         ¦  «        | _        t          j        ˆˆˆˆˆfd
„t          t          ‰¦  «        dz
  ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 óB   •— g | ]}t          ‰|         ‰d ‰¬¦  «        ‘ŒS )r   rÄ   )r¥   )rÍ   Úir{   Úin_channel_listrz   s     €€€r7   rÏ   z)SLANetCSPPAN.__init__.<locals>.<listcomp>]  sJ   ø€ ð ð ð ð õ  Ø /°Ô 2ÀÐ[\Ðisðñ ô ðð ð r8   r_   Únearest)Úscale_factorÚmodec           
      ó@   •— g | ]}t          ‰‰d z  ‰‰‰‰¬¦  «        ‘ŒS ©r_   )r¨   rÔ   r{   ©rÉ   ©rÍ   r�   r{   r   Úcsp_num_blocksr¨   rz   s     €€€€€r7   rÏ   z)SLANetCSPPAN.__init__.<locals>.<listcomp>h  óQ   ø€ ð 
ð 
ð 
ð õ ØØ  1Ñ$Ø Ø +Ø-Ø)ðñ ô ð
ð 
ð 
r8   r   r   r‰   c           	      ó8   •— g | ]}t          ‰‰‰d ‰¬¦  «        ‘ŒS )r_   )r¨   r©   r   )r¹   )rÍ   r�   r   r¨   rz   s     €€€r7   rÏ   z)SLANetCSPPAN.__init__.<locals>.<listcomp>w  sI   ø€ ð 	ð 	ð 	ð õ 2Ø Ø Ø +ØØ!ðñ ô ð	ð 	ð 	r8   c           
      ó@   •— g | ]}t          ‰‰d z  ‰‰‰‰¬¦  «        ‘ŒS rã   rä   rå   s     €€€€€r7   rÏ   z)SLANetCSPPAN.__init__.<locals>.<listcomp>ƒ  rç   r8   )r   rP   r�   r»   Úcsp_kernel_sizeræ   r    rÑ   r�   ÚlenÚchannel_projectorÚUpsampleÚupsampleÚtop_down_blocksÚdownsamplesÚbottom_up_blocks)r1   r   rÞ   r{   ræ   r¨   rz   r6   s    ``@@@@€r7   rP   zSLANetCSPPAN.__init__Q  sâ  øøøøøøø€ õ
 	‰Œ×ÒÑÔÐØÔ4ˆØÔ&ˆ
ØÔ,ˆØÔ.ˆå!#¤ðð ð ð ð ð õ �s ?Ñ3Ô3Ñ4Ô4ð	ñ ô ñ"
ô "
ˆÔõ œ°¸ÐCÑCÔCˆŒÝ!œ}ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ �s ?Ñ3Ô3°aÑ7¸¸BÑ?Ô?ð
ñ 
ô 
ñ 
ô  
ˆÔõ œ=ð	ð 	ð 	ð 	ð 	ð 	õ �s ?Ñ3Ô3°aÑ7Ñ8Ô8ð	ñ 	ô 	ñ
ô 
ˆÔõ !#¤ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ �s ?Ñ3Ô3°aÑ7Ñ8Ô8ð
ñ 
ô 
ñ!
ô !
ˆÔÐÐr8   rp   r²   c                 ó,  — g }t          t          | j        ¦  «        ¦  «        D ]1}|                      | j        |         ||         ¦  «        ¦  «         Œ2|d         g}t	          | j        t          |d d…         ¦  «        ¦  «        D ]g\  }}|d         }t          j        ||j	        dd …         d¬¦  «        } |t          j        ||gd¬¦  «        ¦  «        }	|                     |	¦  «         Œht          t          |¦  «        ¦  «        }
|
d         }t	          | j        | j        |
dd …         ¦  «        D ]2\  }}} ||¦  «        } |t          j        ||gd¬¦  «        ¦  «        }Œ3|                     d¦  «                             dd¦  «        }|S )	Nr‰   éþÿÿÿrß   )r‡   rá   r   rˆ   r   r_   )r�   rë   rì   r”   Úziprï   Úreversedrb   Úinterpolater�   rB   ri   Úlistrð   rñ   Úflattenrf   )r1   rp   Úprojected_featuresÚidxÚtop_down_featuresÚtop_down_blockÚlow_level_featureÚhigh_level_featureÚupsampled_featureÚfused_featureÚpyramid_featuresÚoutput_featureÚdownsample_layerÚbottom_up_blockÚdownsampled_features                  r7   rq   zSLANetCSPPAN.forward�  sÙ  € ØÐÝ�˜TÔ3Ñ4Ô4Ñ5Ô5ð 	Wð 	WˆCØ×%Ò%Ð&A dÔ&<¸SÔ&AÀ-ÐPSÔBTÑ&UÔ&UÑVÔVÐVÐVà/°Ô3Ð4ÐÝ14°TÔ5IÍ8ÐTfÐgjÐhjÐgjÔTkÑKlÔKlÑ1mÔ1mð 	4ð 	4Ñ-ˆNÐ-Ø!2°2Ô!6ÐÝ !¤Ø"Ø&Ô,¨R¨S¨SÔ1Øð!ñ !ô !Ðð
 +˜N­5¬9Ð6GÐIZÐ5[ÐabÐ+cÑ+cÔ+cÑdÔdˆMØ×$Ò$ ]Ñ3Ô3Ð3Ð3å¥Ð):Ñ ;Ô ;Ñ<Ô<ÐØ)¨!Ô,ˆÝEHØÔ˜dÔ3Ð5EÀaÀbÀbÔ5IñF
ô F
ð 	jð 	jÑAÐ˜oÐ/Að #3Ð"2°>Ñ"BÔ"BÐØ,˜_­U¬YÐ8KÐM_Ð7`ÐfgÐ-hÑ-hÔ-hÑiÔiˆNˆNà&×.Ò.¨qÑ1Ô1×;Ò;¸A¸qÑAÔAˆØÐr8   rØ   rE   s   @r7   rÚ   rÚ   L  sk   ø€ € € € € ðð ð=
ð =
ð =
ð =
ð =
ð~ UÔ%6ð ¸5Ô;Lð ð ð ð ð ð ð ð r8   rÚ   c            	       óŠ   ‡ — 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 )ÚSLANetBackboner   c                 óè   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          || j        j        dd …         ¦  «        | _        |                      ¦   «          d S )Nr_   )r   rP   r	   Úvision_backbonerÚ   Únum_featuresÚpost_csp_panrƒ   ©r1   r   r6   s     €r7   rP   zSLANetBackbone.__init__­  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý,¨VÑ4Ô4ˆÔÝ(¨°Ô1EÔ1RÐSTÐSUÐSUÔ1VÑWÔWˆÔà�ŠÑÔÐÐÐr8   rp   rZ   r²   c                 ó~   —  | j         |fi |¤Ž}|                      |j        ¦  «        }t          ||j        ¬¦  «        S )NrŠ   )r	  r  Úfeature_mapsr   rp   )r1   rp   rZ   Úoutputss       r7   rq   zSLANetBackbone.forward´  sT   € ð
 '�$Ô& }Ð?Ð?¸Ð?Ð?ˆØ×)Ò)¨'Ô*>Ñ?Ô?ˆÝ-Ø+Ø!Ô/ð
ñ 
ô 
ð 	
r8   )r9   r:   r;   r   rP   r   r   rB   rK   r   r   r¶   r   rq   rD   rE   s   @r7   r  r  ¬  sž   ø€ € € € € ð˜|ð ð ð ð ð ð ð Øð
Ø"Ô.ð
Ø:@ÐASÔ:Tð
à	ˆuÔ Ô	!Ð$BÑ	Bð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r8   r  zº
    SLANet Table Recognition model for table recognition tasks. Wraps the core SLANetPreTrainedModel
    and returns outputs compatible with the Transformers table recognition API.
    )Úcustom_introc            	       ó�   ‡ — e Zd Zdg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 )ÚSLANetForTableRecognitionÚnum_batches_trackedr   c                 óÆ   •— t          ¦   «                              |¦  «         t          |¬¦  «        | _        t	          |¬¦  «        | _        |                      ¦   «          d S )N)r   )r   rP   r  r   r+   Úheadrƒ   r  s     €r7   rP   z"SLANetForTableRecognition.__init__Ê  sU   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý&¨fÐ5Ñ5Ô5ˆŒÝ!¨Ð0Ñ0Ô0ˆŒ	Ø�ŠÑÔÐÐÐr8   r   rZ   r²   c                 ó’   —  | j         |fi |¤Ž} | j        |j        fi |¤Ž}t          |j        |j        |j        |j        ¬¦  «        S )N)r‹   rp   rH   rI   )r   r  r‹   rG   rp   r   )r1   r   rZ   r  Úhead_outputss        r7   rq   z!SLANetForTableRecognition.forwardÐ  sh   € ð
  �$”- Ð7Ð7°Ð7Ð7ˆØ �t”y Ô!:ÐEÐE¸fÐEÐEˆå.Ø*Ô<Ø!Ô/Ø+Ô9Ø(Ô3ð	
ñ 
ô 
ð 	
r8   )r9   r:   r;   Ú_keys_to_ignore_on_load_missingr   rP   r   r   rB   rK   r   r   r¶   rG   rq   rD   rE   s   @r7   r  r  Á  s©   ø€ € € € € ð (=Ð&=Ð#ð˜|ð ð ð ð ð ð ð Øð
Ø!Ô-ð
Ø9?Ð@RÔ9Sð
à	ˆuÔ Ô	!Ð$CÑ	Cð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r8   r  )r  r   r+   r  )3r#   Údataclassesr   rB   Útorch.nnr    Útorch.nn.functionalÚ
functionalrb   Ú r   r%   Úactivationsr   r   Úbackbone_utilsr   r	   Úmodeling_layersr
   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_slanetr   r   rG   ÚModulerN   rs   r+   r¥   r¹   rÂ   rÉ   rÚ   r  r  Ú__all__rL   r8   r7   ú<module>r*     s±  ðð, €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø .Ð .Ð .Ð .Ð .Ð .ð Að  Að  Að  Að  A˜Oñ  Aô  Að  AðF Ø
ð	5ð 	5ð 	5ð 	5ð 	5Ð&Dñ 	5ô 	5ñ „ñ „ð	5ð+ð +ð +ð +ð +˜RœYñ +ô +ð +ðBð ð ð ð �”	ñ ô ð ð1fð 1fð 1fð 1fð 1fÐ)ñ 1fô 1fð 1fðhð ð ð ð �b”iñ ô ð ðB&ð &ð &ð &ð &Ð(Bñ &ô &ð &ðRð ð ð ð �r”yñ ô ð ð8%ð %ð %ð %ð %�R”Yñ %ô %ð %ðP]ð ]ð ]ð ]ð ]�2”9ñ ]ô ]ð ]ð@
ð 
ð 
ð 
ð 
Ð*ñ 
ô 
ð 
ð* €ððñ ô ð
ð 
ð 
ð 
ð 
Ð 5ñ 
ô 
ñô ð
ð2 dÐ
cÐ
c€€€r8   